結果
問題 | No.2496 LCM between Permutations |
ユーザー |
![]() |
提出日時 | 2023-10-08 17:49:43 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 112 ms / 2,000 ms |
コード長 | 1,731 bytes |
コンパイル時間 | 512 ms |
コンパイル使用メモリ | 53,584 KB |
実行使用メモリ | 25,348 KB |
平均クエリ数 | 952.76 |
最終ジャッジ日時 | 2024-07-26 18:09:44 |
合計ジャッジ時間 | 3,740 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 28 |
ソースコード
/* -*- coding: utf-8 -*-** 2496.cc: No.2496 LCM between Permutations - yukicoder*/#include<cstdio>#include<vector>#include<algorithm>using namespace std;/* constant */const int MAX_N = 1000;const int MAX_P = MAX_N + 50;/* typedef */typedef vector<int> vi;/* global variables */bool primes[MAX_P + 1];int as[MAX_N], bs[MAX_N];/* subroutines */int gen_primes(int maxp, vi &pnums) {fill(primes, primes + maxp + 1, true);primes[0] = primes[1] = false;int p;for (p = 2; p * p <= maxp; p++)if (primes[p]) {pnums.push_back(p);for (int q = p * p; q <= maxp; q += p) primes[q] = false;}for (; p <= maxp; p++)if (primes[p]) pnums.push_back(p);return (int)pnums.size();}int query(int i, int j) {printf("? %d %d\n", i + 1, j + 1); fflush(stdout);int r;scanf("%d", &r);return r;}/* main */int main() {int n;scanf("%d", &n);if (n == 1) {puts("! 1 1"); fflush(stdout);return 0;}vi pnums;gen_primes(MAX_P, pnums);auto vit = upper_bound(pnums.begin(), pnums.end(), n);int p = *(vit - 1);//printf("p=%d\n", p);int u = -1, v = -1;for (int i = 0; i < n; i++)if (query(i, i) % p == 0) {if (u < 0) u = i;else v = i;}int au, bu;if (v < 0) au = bu = u;else {if (query(u, v) % p == 0) au = u, bu = v;else au = v, bu = u;}as[au] = bs[bu] = p;for (int i = 0; i < n; i++)if (i != au) as[i] = query(i, bu) / p;for (int i = 0; i < n; i++)if (i != bu) bs[i] = query(au, i) / p;putchar('!');for (int i = 0; i < n; i++) printf(" %d", as[i]);for (int i = 0; i < n; i++) printf(" %d", bs[i]);putchar('\n'); fflush(stdout);return 0;}