結果
問題 | No.2496 LCM between Permutations |
ユーザー |
![]() |
提出日時 | 2023-10-06 22:07:32 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 116 ms / 2,000 ms |
コード長 | 3,755 bytes |
コンパイル時間 | 3,847 ms |
コンパイル使用メモリ | 231,528 KB |
実行使用メモリ | 25,240 KB |
平均クエリ数 | 953.62 |
最終ジャッジ日時 | 2024-07-26 16:12:05 |
合計ジャッジ時間 | 7,100 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 28 |
コンパイルメッセージ
main.cpp: In function 'int main()': main.cpp:156:30: warning: 'p' may be used uninitialized [-Wmaybe-uninitialized] 156 | if(i!=id)b[i]=que2[i]/p; main.cpp:102:7: note: 'p' was declared here 102 | int p; | ^
ソースコード
// g++-13 4.cpp -std=c++17 -O2 -I .#include <bits/stdc++.h>using namespace std;#include <atcoder/all>using namespace atcoder;using ll = long long;using ld = long double;using vi = vector<int>;using vvi = vector<vi>;using vll = vector<ll>;using vvll = vector<vll>;using vld = vector<ld>;using vvld = vector<vld>;using vst = vector<string>;using vvst = vector<vst>;#define fi first#define se second#define pb push_back#define eb emplace_back#define pq_big(T) priority_queue<T,vector<T>,less<T>>#define pq_small(T) priority_queue<T,vector<T>,greater<T>>#define all(a) a.begin(),a.end()#define rep(i,start,end) for(ll i=start;i<(ll)(end);i++)#define per(i,start,end) for(ll i=start;i>=(ll)(end);i--)#define uniq(a) sort(all(a));a.erase(unique(all(a)),a.end())//factorizeにも同じ関数があります#include <initializer_list>bool is_prime(long long x){using u128=__uint128_t;if(x==2||x==3||x==5||x==7)return true;if(x%2==0||x%3==0||x%5==0||x%7==0)return false;if(x<121){return x>1;}long long d = (x-1) >> __builtin_ctzll(x-1);long long one=1,minus_one=x-1;auto pow = [](long long x,long long n,long long mod){u128 res;x%=mod;if(n==0){res=1;return res;}res=1;u128 now=x;for(;n;n>>=1,now=(now*now)%mod){if(n&1){res=res*now%mod;}}return res;};auto ok = [&](long long a){auto y=pow(a,d,x);long long t=d;while(y!=one&&y!=minus_one&&t!=x-1){y=y*y%x;t<<=1;}if(y!=minus_one&&t%2==0)return false;return true;};if(x<(1ull<<32)){for(long long a:{2,7,61}){if(!ok(a))return false;}}else{for(long long a:{2,325,9375,28178,450775,9780504,1795265022}){if(x<=a)return true;if(!ok(a))return false;}}return true;}int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int n;cin>>n;if(n==1){cout<<"! 1 1"<<endl;return 0;}int p;per(i,n,1){if(is_prime(i)){p=i;break;}}int cnt=0,id=-1;vi que;rep(i,0,n){cout<<"? 1 "<<i+1<<endl;int x;cin>>x;que.emplace_back(x);if(x%p==0){cnt++;id=i;}}vi a(n,-1),b(n,-1);if(cnt==1){// b[id] = pint id1=-1,id2=-1;rep(i,0,n){cout<<"? "<<i+1<<" "<<id+1<<endl;int x;cin>>x;if(x==p){if(id1==-1){id1=i;}else{id2=i;}}a[i]=x/p;}int cnt2=0;vi que2;rep(i,0,n){cout<<"? "<<id1+1<<" "<<i+1<<endl;int x;cin>>x;que2.emplace_back(x);if(x%p==0)cnt2++;}if(cnt2==1){rep(i,0,n)b[i]=que2[i];a[id2]=p;}else{rep(i,0,n){if(i!=id)b[i]=que2[i]/p;else b[i]=p;}a[id1]=p;}cout<<"! ";rep(i,0,n)cout<<a[i]<<" ";rep(i,0,n)cout<<b[i]<<" ";cout<<endl;return 0;}else{// a[0] = pa[0]=p;int id1=-1,id2=-1;rep(i,0,n){if(que[i]==p){if(id1==-1){id1=i;}else{id2=i;}}else{b[i]=que[i]/p;}}int cnt2=0;rep(i,0,n){cout<<"? "<<i+1<<" "<<id1+1<<endl;int x;cin>>x;que.emplace_back(x);if(x%p==0){cnt2++;}}if(cnt2==1){rep(i,0,n)a[i]=que[n+i];b[id1]=1;b[id2]=p;}else{b[id1]=p;b[id2]=1;rep(i,0,n){cout<<"? "<<i+1<<" "<<id2+1<<endl;int x;cin>>x;a[i]=x;}}cout<<"! ";rep(i,0,n)cout<<a[i]<<" ";rep(i,0,n)cout<<b[i]<<" ";cout<<endl;return 0;}}