#include <bits/stdc++.h>
using namespace std;
constexpr double PI = acos(-1.0);
namespace FFT {
void fft(vector<complex<double>>& a) {
const int n = a.size(), L = __lg(n);
static vector<complex<long double>> R(2, 1);
static vector<complex<double>> rt(2, 1);
for (static int k = 2; k < n; k <<= 1) {
R.resize(n), rt.resize(n);
const auto x = polar(1.0L, acos(-1.0L) / k);
for (int i = k; i < k << 1; ++i)
rt[i] = R[i] = i & 1 ? R[i >> 1] * x : R[i >> 1];
}
vector<int> rev(n);
for (int i = 0; i < n; ++i)
rev[i] = (rev[i >> 1] | (i & 1) << L) >> 1;
for (int i = 0; i < n; ++i)
if (i < rev[i])
swap(a[i], a[rev[i]]);
for (int k = 1; k < n; k <<= 1)
for (int i = 0; i < n; i += k << 1)
for (int j = 0; j < k; ++j) {
const auto z = rt[j + k] * a[i + j + k];
a[i + j + k] = a[i + j] - z;
a[i + j] += z;
}
}
vector<int64_t> conv(const vector<int64_t>& a, const vector<int64_t>& b) {
if (a.empty() || b.empty()) return {};
vector<int64_t> res(a.size() + b.size() - 1);
const int L = __lg(res.size()) + 1, n = 1 << L;
vector<complex<double>> in(n);
copy(a.begin(), a.end(), in.begin());
for (int i = 0; i < int(b.size()); ++i)
in[i].imag(b[i]);
fft(in);
for (auto& x : in) x *= x;
vector<complex<double>> out(n);
for (int i = 0; i < n; ++i)
out[i] = in[-i & (n - 1)] - conj(in[i]);
fft(out);
for (int i = 0; i < int(res.size()); ++i)
res[i] = llround(imag(out[i])) / (n << 2);
return res;
}
}; // namespace FFT
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
cin.exceptions(cin.failbit);
#ifdef home
freopen("in", "r", stdin);
freopen("out", "w", stdout);
#endif
int n, m;
cin >> n >> m;
vector<int64_t> a(n + 1), b(m + 1);
for (auto& x : a) cin >> x;
for (auto& x : b) cin >> x;
auto res = FFT::conv(a, b);
cout << accumulate(res.begin(), res.end(), 0ll, [&](auto& sum, auto& x) { return sum ^ x; });
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
1 ms |
204 KB |
Output is correct |
3 |
Correct |
1 ms |
332 KB |
Output is correct |
4 |
Correct |
1 ms |
332 KB |
Output is correct |
5 |
Correct |
1 ms |
460 KB |
Output is correct |
6 |
Correct |
1 ms |
460 KB |
Output is correct |
7 |
Correct |
1 ms |
460 KB |
Output is correct |
8 |
Correct |
1 ms |
460 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
3404 KB |
Output is correct |
2 |
Correct |
30 ms |
12688 KB |
Output is correct |
3 |
Correct |
32 ms |
12992 KB |
Output is correct |
4 |
Correct |
57 ms |
24528 KB |
Output is correct |
5 |
Correct |
60 ms |
24768 KB |
Output is correct |
6 |
Correct |
57 ms |
24580 KB |
Output is correct |
7 |
Correct |
61 ms |
25048 KB |
Output is correct |
8 |
Correct |
61 ms |
24932 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
133 ms |
48288 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |