結果
問題 |
No.186 中華風 (Easy)
|
ユーザー |
![]() |
提出日時 | 2016-04-28 00:32:59 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,973 bytes |
コンパイル時間 | 1,697 ms |
コンパイル使用メモリ | 170,792 KB |
実行使用メモリ | 12,376 KB |
最終ジャッジ日時 | 2024-10-04 16:03:48 |
合計ジャッジ時間 | 3,182 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 6 WA * 17 |
ソースコード
#include<bits/stdc++.h> using namespace std; #define int long long typedef pair<int,int>pint; typedef vector<int>vint; typedef vector<pint>vpint; #define pb push_back #define mp make_pair #define fi first #define se second #define all(v) (v).begin(),(v).end() #define rep(i,n) for(int i=0;i<(n);i++) #define reps(i,f,n) for(int i=(f);i<(n);i++) #define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();it++) template<class T,class U>inline void chmin(T &t,U f){if(t>f)t=f;} template<class T,class U>inline void chmax(T &t,U f){if(t<f)t=f;} int gcd(int a,int b){ return b?gcd(b,a%b):a; } //a*x-m*k=1 int extgcd(int a,int b,int &x,int &y){ if(b==0){ x=1; y=0; return a; } int g=extgcd(b,a%b,y,x); y-=a/b*x; return a; return g; } int X[3],Y[3]; vint get_prime(){ vint f(1000000,1); vint prime; f[0]=f[1]=0; for(int i=2;i<1000000;i++){ if(!f[i])continue; prime.pb(i); for(int j=i+i;j<1000000;j+=i)f[j]=0; } return prime; } signed main(){ rep(i,3)cin>>X[i]>>Y[i]; map<int,int>M; vint prime=get_prime(); for(int p:prime){ vint table(25,-1); rep(i,3){ int t=1,c=0; while(Y[i]%t==0){ if(table[c]==-1)table[c]=X[i]%t; else if(table[c]!=X[i]%t){ cout<<-1<<endl; return 0; } t*=p; c++; } } int t=1,c=0; while(table[c]!=-1){ t*=p; c++; } M[t/p]=table[c-1]; } int ans=0; int m=1; each(i,M)m*=i->fi; each(i,M){ int a=1; each(j,M){ if(i->fi!=j->fi)a*=j->fi; } int inv,tmp; extgcd(a,i->fi,inv,tmp); inv=(inv+i->fi*i->fi)%i->fi; rep(j,i->se)ans=(ans+a*inv)%m; } cout<<m<<endl; cout<<ans%m<<endl; return 0; }