Submission #200859

#TimeUsernameProblemLanguageResultExecution timeMemory
200859jh05013씽크스몰 (kriii3_TT)C++17
30 / 30
2139 ms196088 KiB
#include <bits/stdc++.h> #define sz(X) (int)((X).size()) #define entire(X) X.begin(),X.end() using namespace std; typedef long long ll; void OJize(){cin.tie(NULL);ios_base::sync_with_stdio(false);} const double PI = acos(-1); typedef complex<double> CD; typedef vector<CD> VCD; typedef vector<ll> poly; void FFT(VCD &A, bool inv){ int n = A.size(); for(int i=1, j=0; i<n; i++){ for(int k=n>>1; (j^=k)<k; k>>= 1); if(i < j) swap(A[i], A[j]); } double ang = 2*PI / n * (inv? -1:1); VCD roots(n/2); for(int i=0; i<n/2; i++) roots[i] = CD(cos(ang*i), sin(ang*i)); for(int i=2; i<=n; i<<= 1){ int step = n/i; for(int j=0; j<n; j+=i) for(int k=0; k<i/2; k++){ CD u = A[j+k], v = A[j+k+i/2] * roots[step*k]; A[j+k] = u+v, A[j+k+i/2] = u-v; } } if(inv) for(int i=0; i<n; i++) A[i]/= n; } /* Kriiicon Thinksmall: precise multiplication */ poly thinksmall(poly X, poly Y, ll MOD = 0){ int N = 2; while(N < sz(X)+sz(Y)) N<<= 1; VCD A(N), B(N), AR(N), BR(N); for(int i=0; i<sz(X); i++) A[i] = CD(X[i]>>15, X[i]&32767); for(int i=0; i<sz(Y); i++) B[i] = CD(Y[i]>>15, Y[i]&32767); FFT(A, 0); FFT(B, 0); for(int i=0; i<N; i++){ int j = i? N-i : i; CD f1 = (A[i] + conj(A[j])) / CD(2, 0), f2 = (A[i] - conj(A[j])) / CD(0, 2), f3 = (B[i] + conj(B[j])) / CD(2, 0), f4 = (B[i] - conj(B[j])) / CD(0, 2); AR[i] = f1 * (f3 + f4 * CD(0, 1)); BR[i] = f2 * (f3 + f4 * CD(0, 1)); } FFT(AR, 1); FFT(BR, 1); vector<ll> ans; for(int i=0; i<N; i++){ ll a = (ll)round(AR[i].real()), b = (ll)round(AR[i].imag()) + (ll)round(BR[i].real()), c = (ll)round(BR[i].imag()); if(MOD) a%= MOD, b%= MOD, c%= MOD; ll res = (a<<30) + (b<<15) + c; if(MOD) res%= MOD, res+= MOD, res%= MOD; ans.push_back(res); } return ans; } int main(){OJize(); int n, m; cin>>n>>m; poly X(n+1), Y(m+1); for(int i=0; i<=n; i++) cin>>X[i]; for(int i=0; i<=m; i++) cin>>Y[i]; ll ans = 0; for(ll x: thinksmall(X, Y)) ans^= x; cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...