結果
問題 | No.896 友達以上恋人未満 |
ユーザー | LayCurse |
提出日時 | 2019-09-27 22:45:59 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 1,491 ms / 3,500 ms |
コード長 | 3,542 bytes |
コンパイル時間 | 2,892 ms |
コンパイル使用メモリ | 215,328 KB |
実行使用メモリ | 82,724 KB |
最終ジャッジ日時 | 2024-09-24 23:59:46 |
合計ジャッジ時間 | 8,804 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,812 KB |
testcase_01 | AC | 2 ms
6,940 KB |
testcase_02 | AC | 2 ms
6,940 KB |
testcase_03 | AC | 2 ms
6,940 KB |
testcase_04 | AC | 2 ms
6,944 KB |
testcase_05 | AC | 583 ms
36,588 KB |
testcase_06 | AC | 916 ms
36,704 KB |
testcase_07 | AC | 587 ms
36,560 KB |
testcase_08 | AC | 540 ms
36,504 KB |
testcase_09 | AC | 1,204 ms
70,220 KB |
testcase_10 | AC | 1,491 ms
82,724 KB |
ソースコード
#pragma GCC optimize ("Ofast") #include<bits/stdc++.h> using namespace std; inline void rd(int &x){ int k; int m=0; x=0; for(;;){ k = getchar_unlocked(); if(k=='-'){ m=1; break; } if('0'<=k&&k<='9'){ x=k-'0'; break; } } for(;;){ k = getchar_unlocked(); if(k<'0'||k>'9'){ break; } x=x*10+k-'0'; } if(m){ x=-x; } } inline void wt_L(char a){ putchar_unlocked(a); } inline void wt_L(long long x){ int s=0; int m=0; char f[20]; if(x<0){ m=1; x=-x; } while(x){ f[s++]=x%10; x/=10; } if(!s){ f[s++]=0; } if(m){ putchar_unlocked('-'); } while(s--){ putchar_unlocked(f[s]+'0'); } } int N; int M; int mulX; int addX; int mulY; int addY; int MOD; int X[1000]; int Y[1000]; int A[1000]; int B[1000]; long long z[16777216]; long long ans[10000]; long long res[1000]; long long res2; long long solve(long long a){ int i; long long res = 0; if(a >= MOD){ return 0; } if(a < 10000){ return ans[a]; } for(i=(a);i<(MOD);i+=(a)){ res += z[i]; } return res; } int main(){ int i; unsigned long long x; unsigned long long y; unsigned long long a; unsigned long long b; unsigned mm; rd(M); rd(N); rd(mulX); rd(addX); rd(mulY); rd(addY); rd(MOD); { int Lj4PdHRW; for(Lj4PdHRW=(0);Lj4PdHRW<(M);Lj4PdHRW++){ rd(X[Lj4PdHRW]); } } { int KL2GvlyY; for(KL2GvlyY=(0);KL2GvlyY<(M);KL2GvlyY++){ rd(Y[KL2GvlyY]); } } { int Q5VJL1cS; for(Q5VJL1cS=(0);Q5VJL1cS<(M);Q5VJL1cS++){ rd(A[Q5VJL1cS]); } } { int e98WHCEY; for(e98WHCEY=(0);e98WHCEY<(M);e98WHCEY++){ rd(B[e98WHCEY]); } } for(i=(0);i<(M);i++){ z[X[i]] += Y[i]; } x = X[M-1]; y = Y[M-1]; mm = MOD - 1; int cTE1_r3A = N; for(i=(M);i<(cTE1_r3A);i++){ x = (x * mulX + addX) & mm; y = (y * mulY + addY) & mm; z[x] += y; } for(i=(1);i<(10000);i++){ int j; for(j=(i);j<(MOD);j+=(i)){ ans[i] += z[j]; } } for(i=(0);i<(M);i++){ res[i] = solve(A[i]) - solve((long long)A[i]*B[i]); res2 ^= res[i]; } a = A[M-1]; b = B[M-1]; for(i=(M);i<(N);i++){ a = ((a * mulX + addX + mm) & mm) + 1; b = ((b * mulY + addY + mm) & mm) + 1; res2 ^= solve(a) - solve(a*b); } { int RZTsC2BF; for(RZTsC2BF=(0);RZTsC2BF<(M);RZTsC2BF++){ wt_L(res[RZTsC2BF]); wt_L('\n'); } } wt_L(res2); wt_L('\n'); return 0; } // cLay varsion 20190925-1 // --- original code --- // int N, M, mulX, addX, mulY, addY, MOD; // int X[1000], Y[1000], A[1000], B[1000]; // ll z[16777216], ans[10000]; // ll res[1000], res2; // // ll solve(ll a){ // ll res = 0; // if(a >= MOD) return 0; // if(a < 10000) return ans[a]; // rep(i,a,MOD,a) res += z[i]; // return res; // } // // { // ull x, y, a, b; // unsigned mm; // rd(M,N,mulX,addX,mulY,addY,MOD); // rd(X(M),Y(M),A(M),B(M)); // rep(i,M) z[X[i]] += Y[i]; // x = X[M-1]; // y = Y[M-1]; // mm = MOD - 1; // REP(i,M,N){ // x = (x * mulX + addX) & mm; // y = (y * mulY + addY) & mm; // z[x] += y; // } // rep(i,1,10000) rep(j,i,MOD,i) ans[i] += z[j]; // // rep(i,M){ // res[i] = solve(A[i]) - solve((ll)A[i]*B[i]); // res2 ^= res[i]; // } // a = A[M-1]; // b = B[M-1]; // rep(i,M,N){ // a = ((a * mulX + addX + mm) & mm) + 1; // b = ((b * mulY + addY + mm) & mm) + 1; // res2 ^= solve(a) - solve(a*b); // } // // wtLn(res(M), res2); // }