Submission #526087

#TimeUsernameProblemLanguageResultExecution timeMemory
526087eric00513씽크스몰 (kriii3_TT)C++17
30 / 30
3153 ms198052 KiB
#include <bits/stdc++.h> using namespace std; #define sz(x) (int)(x).size() #define all(x) (x).begin(), (x).end() using ll = long long; using base = complex<long double>; const long double PI = acos(-1.L); void fft(vector<base>& a, bool inv) { int n = sz(a); for (int i = 1, j = 0; i < n; i++) { int bit = n >> 1; while (j >= bit) j -= bit, bit >>= 1; j += bit; if (i < j) swap(a[i], a[j]); } for (int len = 2; len <= n; len <<= 1) { vector<base> w(len >> 1); for (int i = 0; i < (len >> 1); i++) { long double ang = 2 * PI * i / len * (inv ? -1 : 1); w[i] = base(cos(ang), sin(ang)); } for (int i = 0; i < n; i += len) { for (int j = 0; j < len / 2; j++) { base u = a[i + j], v = a[i + j + len / 2] * w[j]; a[i + j] = u + v; a[i + j + len / 2] = u - v; } } } if (inv) for (int i = 0; i < n; i++) a[i] /= n; } vector<ll> multiply(vector<int>& a, vector<int>& b) { vector<base> fa(all(a)), fb(all(b)); int n = 1; while (n < max(sz(a), sz(b))) n <<= 1; fa.resize(n), fb.resize(n); fft(fa, false); fft(fb, false); for (int i = 0; i < n; i++) fa[i] *= fb[i]; fft(fa, true); vector<ll> ret(n); for (int i = 0; i < n; i++) ret[i] = (ll)(fa[i].real() + (fa[i].real() > 0 ? 0.5 : -0.5)); return ret; } int main() { cin.tie(0); ios_base::sync_with_stdio(0); int n, m; cin >> n >> m; n++, m++; int k = 1; while (k < 2 * max(n, m) - 1) k <<= 1; vector<int> a(k), b(k); for (int i = 0; i < n; i++) cin >> a[i]; for (int i = 0; i < m; i++) cin >> b[i]; vector<ll> res = multiply(a, b); ll ans = 0; for (int i = 0; i < n + m - 1; i++) ans ^= res[i]; cout << ans << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...