結果
問題 | No.2496 LCM between Permutations |
ユーザー |
|
提出日時 | 2023-10-06 22:23:44 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 2,907 bytes |
コンパイル時間 | 1,399 ms |
コンパイル使用メモリ | 98,008 KB |
実行使用メモリ | 25,476 KB |
平均クエリ数 | 926.72 |
最終ジャッジ日時 | 2024-07-26 16:35:05 |
合計ジャッジ時間 | 4,385 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 26 WA * 1 QLE * 1 |
コンパイルメッセージ
main.cpp: In function 'int main()': main.cpp:105:24: warning: 'T' may be used uninitialized [-Wmaybe-uninitialized] 105 | A[askid]=T[mini]; | ~~~~~~^ main.cpp:97:13: note: 'T' declared here 97 | int T[1000]; | ^ main.cpp:94:21: warning: 'a' may be used uninitialized [-Wmaybe-uninitialized] 94 | A[a]=B[b]=1; | ~~~~^~~~~~~ main.cpp:84:21: note: 'a' was declared here 84 | int a,b; | ^ main.cpp:94:26: warning: 'b' may be used uninitialized [-Wmaybe-uninitialized] 94 | A[a]=B[b]=1; | ~~~~^~ main.cpp:84:23: note: 'b' was declared here 84 | int a,b; | ^
ソースコード
#include<iostream>#include<algorithm>#include<vector>#include<cassert>#include<cstdlib>using namespace std;const bool debug=false;int gcd(int a,int b){while(b){int t=a%b;a=b;b=t;}return a;}bool isp[1001];int N;int A[1000],B[1000];int aA[1000],aB[1000];int ask(int i,int j){cout<<"? "<<i+1<<" "<<j+1<<endl;if(debug)return aA[i]*aB[j]/gcd(aA[i],aB[j]);int x;cin>>x;return x;}void answer(){cout<<"!";for(int i=0;i<N;i++)cout<<" "<<A[i];for(int i=0;i<N;i++)cout<<" "<<B[i];cout<<endl;if(debug){for(int i=0;i<N;i++)if(aA[i]!=A[i]||aB[i]!=B[i]){cout<<"WA"<<endl;exit(1);}cout<<"AC"<<endl;}exit(0);}#include<random>mt19937 rng;void setup(){random_device seed_gen;unsigned int seed=seed_gen();//seed=1604191338;if(debug)cout<<"seed = "<<seed<<endl;rng=mt19937(seed);if(!debug)return;N=rng()%100+1;for(int i=0;i<N;i++)aA[i]=aB[i]=i+1;shuffle(aA,aA+N,rng);shuffle(aB,aB+N,rng);cout<<"answer =";for(int i=0;i<N;i++)cout<<" "<<aA[i];for(int i=0;i<N;i++)cout<<" "<<aB[i];cout<<endl;}int main(){ios::sync_with_stdio(false);cin.tie(nullptr);setup();if(!debug)cin>>N;for(int i=2;i<=N;i++)isp[i]=true;for(int i=2;i<=N;i++)if(isp[i]){for(int j=i+i;j<=N;j+=i)isp[j]=false;}if(N==1){A[0]=B[0]=1;answer();}if(N==2){bool fn=false;int a,b;for(int i=0;!fn&&i<2;i++)for(int j=0;!fn&&j<2;j++){if(ask(i,j)==1){a=i,b=j;fn=true;}}A[0]=A[1]=B[0]=B[1]=2;A[a]=B[b]=1;answer();}int T[1000];int mini=0;int askid=rng()%N;for(int i=0;i<N;i++){T[i]=ask(askid,i);if(T[mini]>T[i])mini=i;}A[askid]=T[mini];int cnt[1001]={};for(int i=0;i<N;i++){assert(T[i]%A[askid]==0);cnt[T[i]/A[askid]]++;}vector<pair<int,int> >Ps;for(int i=0;i<N;i++){if(cnt[T[i]/A[askid]]>1)continue;int p=T[i]/A[askid];if(!isp[p]||p*3<=N)continue;Ps.push_back(make_pair(p,i));B[i]=p;}assert(!Ps.empty());sort(Ps.begin(),Ps.end());int P=Ps.back().first,Pi=Ps.back().second;for(int i=0;i<N;i++)if(i!=askid){int v=ask(i,Pi);assert(v%P==0);A[i]=v/P;}vector<int>one;for(int i=0;i<N;i++)if(A[i]==1)one.push_back(i);assert(one.size()==2);int ONE;if(Ps.size()>=2){if(ask(one[0],Ps[0].second)%P!=0)ONE=one[0];else ONE=one[1];}else{vector<int>test;for(int i=0;i<N;i++)if(i!=Pi)test.push_back(i);assert(test.size()>=2);shuffle(test.begin(),test.end(),rng);shuffle(one.begin(),one.end(),rng);if(ask(one[0],test[0])%P!=0||ask(one[0],test[1])%P!=0)ONE=one[0];else ONE=one[1];}A[one[0]+one[1]-ONE]=P;for(int i=0;i<N;i++)if(B[i]==0)B[i]=ask(ONE,i);if(P*2<=N){vector<int>two;for(int i=0;i<N;i++)if(A[i]==2)two.push_back(i);assert(two.size()==2);int O=0;while(B[O]!=1)O++;if(ask(two[0],O)==2)A[two[1]]=2*P;else A[two[0]]=2*P;}answer();}