結果
問題 | No.97 最大の値を求めるくえり |
ユーザー |
![]() |
提出日時 | 2021-10-26 00:05:59 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 142 ms / 5,000 ms |
コード長 | 1,411 bytes |
コンパイル時間 | 5,286 ms |
コンパイル使用メモリ | 251,892 KB |
最終ジャッジ日時 | 2025-01-25 06:56:39 |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 19 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:61:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 61 | scanf("%d",&q); | ~~~~~^~~~~~~~~
ソースコード
#include <stdio.h>#include <bits/stdc++.h>#include <atcoder/all>using namespace atcoder;using namespace std;#define rep(i,n) for (int i = 0; i < (n); ++i)#define Inf 100000000000unsigned 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, vector<int> &A) {for(int i = 0; i < N; ++ i)A[i] = xor128() % 100003;}int main(){int N,Q;cin>>N>>Q;vector<int> A(N);generateA(N,A);//cout<<A[0]<<endl;vector<bool> f(100003,false);rep(i,N){//cout<<A[i]<<endl;f[A[i]] = true;}int Cnt =0;rep(i,f.size()){if(f[i])Cnt++;}vector<int> ans(100003,-1);vector<int> Inv(100003,0);rep(i,100003){if(i==0)continue;Inv[i] = inv_mod(i,100003);}if(Cnt<=400){rep(i,f.size()){if(!f[i])continue;if(i==0)continue;rep(j,100003){long long temp = j;temp *= Inv[i];temp %= 100003;ans[temp] = max(ans[temp],j);}}}ans[0] = 0;rep(i,Q){int q;scanf("%d",&q);if(ans[q]==-1){for(int j=100002;j>=1;j--){long long t = j;t *= Inv[q];t %= 100003;if(f[t]){ans[q] = j;break;}}}printf("%d\n",ans[q]);}return 0;}