結果
問題 |
No.187 中華風 (Hard)
|
ユーザー |
|
提出日時 | 2023-11-08 23:45:49 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 134 ms / 3,000 ms |
コード長 | 1,417 bytes |
コンパイル時間 | 2,034 ms |
コンパイル使用メモリ | 200,408 KB |
最終ジャッジ日時 | 2025-02-17 20:09:19 |
ジャッジサーバーID (参考情報) |
judge4 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 25 |
ソースコード
#include<bits/stdc++.h> using namespace std; using ll=long long; namespace Lib{ ll extGCD(ll a, ll b, ll &x, ll &y){ if(b==0){ x=1,y=0; return a; } ll d=extGCD(b,a%b,y,x); y=y-a/b*x; return d; } ll modinv(ll a,ll m){ ll x=0,y=0,d=extGCD(a,m,x,y); if(d!=1){ return -1; } return x; } } namespace Lib{ pair<ll,ll>crt_mod(vector<ll> r,vector<ll> m,ll MOD){ int n=r.size(); for(int i=0;i<n;i++){ for(int j=0;j<i;j++){ ll g=gcd(m[i],m[j]); if((r[i]-r[j])%g!=0){ return make_pair(-1ll,-1ll); } m[i]/=g,m[j]/=g; ll gi=gcd(m[i],g),gj=g/gi; do{ g=gcd(gi,gj); gi*=g,gj/=g; }while(g!=1); m[i]*=gi,m[j]*=gj; r[i]%=m[i],r[j]%=m[j]; } } m.push_back(MOD); vector cef(n+1,1ll),con(n+1,0ll); for(int i=0;i<n;i++){ ll t=(r[i]-con[i])*modinv(cef[i],m[i])%m[i]; if(t<0)t+=m[i]; for(int j=i+1;j<=n;j++){ con[j]+=cef[j]*t; con[j]%=m[j]; cef[j]=cef[j]*m[i]%m[j]; } } return make_pair(con[n],cef[n]); } } // namespace Lib int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N; const ll MOD=1e9+7; cin>>N; vector R(N,0ll),M(N,0ll); for(int i=0;i<N;i++)cin>>R[i]>>M[i]; auto [ans,l]=Lib::crt_mod(R,M,MOD); for(int i=0;i<N;i++){ if(R[i]!=0){ cout<<ans<<'\n'; return 0; } } cout<<l<<'\n'; }