#include <bits/stdc++.h>
using namespace std;
namespace io
{
const int L = (1 << 22) + 1;
char ibuf[L], *iS, *iT, obuf[L], *oS = obuf, *oT = obuf + L - 1, c, qu[55]; int f, qr;
#define gc() getchar() //(iS == iT ? (iT = (iS = ibuf) + fread (ibuf, 1, L, stdin), (iS == iT ? EOF : *iS ++)) : *iS ++)
inline void flush () { fwrite (obuf, 1, oS - obuf, stdout); oS = obuf; }
inline void pc (char x) { *oS ++ = x; if (oS == oT) flush (); }
template <class I> inline void gi (I & x)
{
for (f = 1, c = gc(); c < '0' || c > '9'; c = gc()) if (c == '-') f = -1;
for (x = 0; c <= '9' && c >= '0'; c = gc()) x = x * 10 + (c & 15); x *= f;
}
template <class I> inline void print (I x)
{
if (!x) pc ('0'); if (x < 0) pc ('-'), x = -x;
while (x) qu[++ qr] = x % 10 + '0', x /= 10;
while (qr) pc (qu[qr --]);
}
struct IOC { ~ IOC () { flush (); } } _ioc_;
}
using io :: gi;
using io :: pc;
using io :: print;
const double pi (acos(-1));
const int MaxN(500003);
int rev[MaxN];
struct comp_t
{
double x, y;
comp_t(double _x = 0, double _y = 0) : x(_x), y(_y) { }
inline comp_t operator + (const comp_t &T)
{ return comp_t(x + T.x, y + T.y); }
inline comp_t operator - (const comp_t &T)
{ return comp_t(x - T.x, y - T.y); }
inline comp_t operator * (const comp_t &T)
{ return comp_t(x * T.x - y * T.y, x * T.y + y * T.x); }
inline comp_t operator /= (const double &T)
{
x /= T, y /= T;
return *this;
}
inline comp_t conj()
{ return comp_t(x, -y); }
}A[MaxN];
void dft(comp_t *a, int n)
{
for(int i = 1; i < n; i++)
if(i < rev[i])
swap(a[i], a[rev[i]]);
for(int l = 1; l < n; l <<= 1)
{
comp_t wn(cos(pi / l), sin(pi / l));
static comp_t w[MaxN];
w[0] = 1.0;
for(int i = 1; i < l; i++)
w[i] = w[i - 1] * wn;
for(int i = 0; i < n; i += l << 1)
for(int j = 0; j < l; j++)
{
comp_t x = a[i + j], y = a[i + j + l] * w[j];
a[i + j] = x + y, a[i + j + l] = x - y;
}
}
}
int main()
{
int n, m, L, k;
gi(n), gi(m);
for(int i = 0; i <= n; i++)
gi(A[i].x);
for(int i = 0; i <= m; i++)
gi(A[i].y);
for(L = 1, k = -1; L <= n + m; L <<= 1, ++k);
for(int i = 1; i < L; i++)
rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << k);
dft(A, L);
A[L] = A[0];
for(int i = 0; i <= L - i; i++)
{
comp_t t1 = (A[i] + A[L - i].conj()) * comp_t(0, 1) * (A[i] - A[L - i].conj());
comp_t t2 = (A[L - i] + A[i].conj()) * comp_t(0, 1) * (A[L - i] - A[i].conj());
t1 /= 4, t2 /= 4;
A[L - i] = t1, A[i] = t2;
}
dft(A, L);
for(int i = 0; i <= n + m; i++)
print((int) (-A[i].x / L + 0.5)), pc(' ');
return 0;
}
Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
Subtask #1 Testcase #1 | 1.804 ms | 15 MB + 312 KB | Accepted | Score: 0 | 显示更多 |
Subtask #1 Testcase #2 | 22.728 ms | 19 MB + 148 KB | Accepted | Score: 100 | 显示更多 |
Subtask #1 Testcase #3 | 10.423 ms | 16 MB + 364 KB | Accepted | Score: 0 | 显示更多 |
Subtask #1 Testcase #4 | 10.534 ms | 16 MB + 340 KB | Accepted | Score: 0 | 显示更多 |
Subtask #1 Testcase #5 | 1.803 ms | 15 MB + 312 KB | Accepted | Score: 0 | 显示更多 |
Subtask #1 Testcase #6 | 1.735 ms | 15 MB + 312 KB | Accepted | Score: 0 | 显示更多 |
Subtask #1 Testcase #7 | 1.807 ms | 15 MB + 312 KB | Accepted | Score: 0 | 显示更多 |
Subtask #1 Testcase #8 | 21.731 ms | 18 MB + 636 KB | Accepted | Score: 0 | 显示更多 |
Subtask #1 Testcase #9 | 21.71 ms | 18 MB + 636 KB | Accepted | Score: 0 | 显示更多 |
Subtask #1 Testcase #10 | 20.736 ms | 18 MB + 96 KB | Accepted | Score: 0 | 显示更多 |
Subtask #1 Testcase #11 | 22.974 ms | 19 MB + 308 KB | Accepted | Score: 0 | 显示更多 |
Subtask #1 Testcase #12 | 18.797 ms | 17 MB + 68 KB | Accepted | Score: 0 | 显示更多 |
Subtask #1 Testcase #13 | 872.28 us | 7 MB + 692 KB | Accepted | Score: 0 | 显示更多 |