結果
問題 |
No.97 最大の値を求めるくえり
|
ユーザー |
![]() |
提出日時 | 2025-06-12 21:01:44 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,476 bytes |
コンパイル時間 | 5,623 ms |
コンパイル使用メモリ | 194,268 KB |
実行使用メモリ | 12,928 KB |
最終ジャッジ日時 | 2025-06-12 21:04:39 |
合計ジャッジ時間 | 13,226 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 4 TLE * 1 -- * 14 |
ソースコード
#include <bits/stdc++.h> using namespace std; const int MOD = 100003; unsigned xor128_x = 123456789, xor128_y = 362436069, xor128_z = 521288629, xor128_w = 88675123; unsigned xor128() { unsigned t = xor128_x ^ (xor128_x << 11); xor128_x = xor128_y; xor128_y = xor128_z; xor128_z = xor128_w; return xor128_w = xor128_w ^ (xor128_w >> 19) ^ (t ^ (t >> 8)); } void generateA(int N, int A[]) { for (int i = 0; i < N; ++i) A[i] = xor128() % MOD; } long long mod_pow(long long a, long long b, long long mod) { long long result = 1; a %= mod; while (b > 0) { if (b % 2 == 1) result = (result * a) % mod; a = (a * a) % mod; b /= 2; } return result; } int main() { ios::sync_with_stdio(false); cin.tie(0); int N, Q; cin >> N >> Q; int* A = new int[N]; generateA(N, A); vector<bool> exist(MOD, false); for (int i = 0; i < N; ++i) { exist[A[i]] = true; } delete[] A; while (Q--) { int q; cin >> q; if (q == 0) { cout << 0 << '\n'; continue; } int inv_q = mod_pow(q, MOD - 2, MOD); int max_x = -1; for (int x = MOD - 1; x >= 0; --x) { int a = (1LL * x * inv_q) % MOD; if (a < 0) a += MOD; if (exist[a]) { max_x = x; break; } } cout << max_x << '\n'; } return 0; }