結果
問題 | No.590 Replacement |
ユーザー | vjudge1 |
提出日時 | 2024-11-10 12:38:23 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 96 ms / 2,000 ms |
コード長 | 2,046 bytes |
コンパイル時間 | 2,494 ms |
コンパイル使用メモリ | 176,952 KB |
実行使用メモリ | 10,904 KB |
最終ジャッジ日時 | 2024-11-10 12:38:30 |
合計ジャッジ時間 | 5,659 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,248 KB |
testcase_02 | AC | 2 ms
5,248 KB |
testcase_03 | AC | 2 ms
5,248 KB |
testcase_04 | AC | 2 ms
5,248 KB |
testcase_05 | AC | 2 ms
5,248 KB |
testcase_06 | AC | 2 ms
5,248 KB |
testcase_07 | AC | 6 ms
5,248 KB |
testcase_08 | AC | 4 ms
5,248 KB |
testcase_09 | AC | 7 ms
5,248 KB |
testcase_10 | AC | 4 ms
5,248 KB |
testcase_11 | AC | 3 ms
5,248 KB |
testcase_12 | AC | 7 ms
5,248 KB |
testcase_13 | AC | 28 ms
6,144 KB |
testcase_14 | AC | 45 ms
7,040 KB |
testcase_15 | AC | 5 ms
5,248 KB |
testcase_16 | AC | 11 ms
5,248 KB |
testcase_17 | AC | 18 ms
5,504 KB |
testcase_18 | AC | 62 ms
9,436 KB |
testcase_19 | AC | 67 ms
8,780 KB |
testcase_20 | AC | 16 ms
5,248 KB |
testcase_21 | AC | 84 ms
9,772 KB |
testcase_22 | AC | 74 ms
10,396 KB |
testcase_23 | AC | 83 ms
10,428 KB |
testcase_24 | AC | 92 ms
9,944 KB |
testcase_25 | AC | 90 ms
9,880 KB |
testcase_26 | AC | 92 ms
10,008 KB |
testcase_27 | AC | 88 ms
10,392 KB |
testcase_28 | AC | 87 ms
9,884 KB |
testcase_29 | AC | 90 ms
9,624 KB |
testcase_30 | AC | 96 ms
9,724 KB |
testcase_31 | AC | 94 ms
10,240 KB |
testcase_32 | AC | 91 ms
10,268 KB |
testcase_33 | AC | 3 ms
5,248 KB |
testcase_34 | AC | 2 ms
5,248 KB |
testcase_35 | AC | 2 ms
5,248 KB |
testcase_36 | AC | 46 ms
10,884 KB |
testcase_37 | AC | 48 ms
10,860 KB |
testcase_38 | AC | 45 ms
10,776 KB |
testcase_39 | AC | 44 ms
10,904 KB |
testcase_40 | AC | 50 ms
9,624 KB |
testcase_41 | AC | 51 ms
9,736 KB |
testcase_42 | AC | 50 ms
10,504 KB |
testcase_43 | AC | 50 ms
10,136 KB |
testcase_44 | AC | 44 ms
9,472 KB |
testcase_45 | AC | 49 ms
10,904 KB |
testcase_46 | AC | 49 ms
10,892 KB |
ソースコード
#include<bits/stdc++.h> #define mod 1000000007 using namespace std; int a[100005],b[100005]; int p[100005],q[100005]; int vist[100005]; int dp[100005],wp[100005],rp[100005]; int dq[100005],wq[100005],rq[100005]; pair<long long,int>pi[100005]; long long bs[100005]; void exgcd(int a,int b,int &x,int &y){ if(!b){ x=1,y=0; return; } exgcd(b,a%b,x,y); int z=x;x=y,y=z-a/b*y; } int niyuan(int a,int b){ int x=0,y=0;exgcd(a,b,x,y); return (x%b+b)%b; } long long crt(int r1,int m1,int r2,int m2,int g){ int gg=r1%g; r1/=g,m1/=g,r2/=g,m2/=g; long long an=0; an=(1ll*r1*m2*niyuan(m2,m1)+1ll*r2*m1*niyuan(m1,m2))%(1ll*m1*m2); return an*g+gg; } int suan(vector<int>v){ long long N=0; int t=0; for(auto x:v){ int g=__gcd(dp[x],dq[x]); N=1ll*dp[x]*dq[x]/g; int qm=((wq[x]-wp[x])%g+g)%g; wq[x]=(wq[x]-qm+dq[x])%dq[x]; bs[++t]=crt(wp[x],dp[x],wq[x],dq[x],g); } sort(bs+1,bs+t+1); bs[t+1]=bs[1]+N; int ans=0; for(int i=1;i<=t;++i){ int y=(bs[i+1]-bs[i])%mod; ans=(ans+1ll*y*(y-1)/2)%mod; } return ans; } int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;++i)scanf("%d",&a[i]),p[a[i]]=i; for(int i=1;i<=n;++i)scanf("%d",&b[i]),q[b[i]]=i; for(int i=1;i<=n;++i)if(!vist[i]){ int x=i; vector<int>v; while(1){ v.emplace_back(x); vist[x]=1;x=p[x]; if(x==i)break; } int k=v.size(); for(int j=0;j<k;++j)dp[v[j]]=k,wp[v[j]]=j,rp[v[j]]=i; } memset(vist,0,sizeof(vist)); for(int i=1;i<=n;++i)if(!vist[i]){ int x=i; vector<int>v; while(1){ v.emplace_back(x); vist[x]=1;x=q[x]; if(x==i)break; } int k=v.size(); for(int j=0;j<k;++j)dq[v[j]]=k,wq[v[j]]=j,rq[v[j]]=i; } for(int i=1;i<=n;++i){ int A=(wp[i]-wq[i]+dq[i])%__gcd(dp[i],dq[i]); int B=rp[i],C=rq[i]; long long hx=1ll*A*(n+1)*(n+1)+1ll*B*(n+1)+C; pi[i]=make_pair(hx,i); } sort(pi+1,pi+n+1); int ans=0; for(int i=1;i<=n;){ int j=i; while(j<=n&&pi[j].first==pi[i].first)++j; vector<int>g; for(int k=i;k<j;++k)g.emplace_back(pi[k].second); ans=(ans+suan(g))%mod; i=j; } printf("%d\n",ans); return 0; }