提交记录 28789


用户 题目 状态 得分 用时 内存 语言 代码长度
root357 1002i. 【模板题】多项式乘法 Accepted 100 75.921 ms 100880 KB C++ 1.96 KB
提交时间 评测时间
2026-01-15 23:09:32 2026-01-15 23:09:36
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
typedef double db;
const int maxn = 1000010;
const db Pi = acos(-1.0);
struct com {
    db r, i;
    com(db r_ = 0, db i_ = 0) {
        r = r_, i = i_;
    }
};
com operator + (const com &a, const com &b) {
    return com(a.r + b.r, a.i + b.i);
}
com operator - (const com &a, const com &b) {
    return com(a.r - b.r, a.i - b.i);
}
com operator * (const com &a, const com &b) {
    return com(a.r * b.r - a.i * b.i, a.r * b.i + a.i * b.r);
}
int rev[(1 << 21) + 10];
com W[(1 << 21) + 10];
void fft(com *f, int n, int op) {
    for (int i = 0; i < n; i ++) {
        if (i < rev[i]) {
            swap(f[i], f[rev[i]]);
        }
    }
    for (int mid = 1, l = 2; mid < n; mid <<= 1, l <<= 1) {
        for (int i = 0; i < n; i += l) {
            for (int j = 0; j < mid; j ++) {
                com w(W[n / mid * j].r, W[n / mid * j].i * op);
                com x = f[i | j], y = w * f[i | j | mid];
                f[i | j] = x + y;
                f[i | j | mid] = x - y;
            }
        }
    }
    if (op == -1) {
        for (int i = 0; i < n; i ++) {
            f[i].r /= n;
            f[i].i /= n;
        }
    }
}
com F[(1 << 21) + 10], G[(1 << 21) + 10];
int main () {
    int n, m;
    scanf("%d%d", &n, &m);
    for (int i = 0, c = 0; i <= n; i ++) {
        scanf("%d", &c);
        F[i].r = c;
    }
    for (int i = 0, c = 0; i <= m; i ++) {
        scanf("%d", &c);
        F[i].i = c;
    }
    int lim = 1, k = 0;
    while (lim <= (n + m)) {
        lim <<= 1;
        k ++;
    }
    for (int i = 0; i < lim; i ++) {
        rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (k - 1));
        W[i] = com(cos(Pi / lim * i), sin(Pi / lim * i));
    }
    fft(F, lim, 1);
    for (int i = 0; i < lim; i ++) {
        F[i] = F[i] * F[i];
    }
    fft(F, lim, -1);
    for (int i = 0; i <= (n + m); i ++) {
        printf("%d ", (int) (F[i].i / 2 + 0.5));
        // printf("%lf ", F[i].r);
    }
    return 0;
}

CompilationN/AN/ACompile OKScore: N/A

Subtask #1 Testcase #110.729 ms96 MB + 20 KBAcceptedScore: 100

Subtask #1 Testcase #273.479 ms98 MB + 448 KBAcceptedScore: 0

Subtask #1 Testcase #339.361 ms96 MB + 812 KBAcceptedScore: 0

Subtask #1 Testcase #438.578 ms96 MB + 800 KBAcceptedScore: 0

Subtask #1 Testcase #511.095 ms96 MB + 20 KBAcceptedScore: 0

Subtask #1 Testcase #610.726 ms96 MB + 20 KBAcceptedScore: 0

Subtask #1 Testcase #710.723 ms96 MB + 20 KBAcceptedScore: 0

Subtask #1 Testcase #867.562 ms98 MB + 180 KBAcceptedScore: 0

Subtask #1 Testcase #967.727 ms98 MB + 180 KBAcceptedScore: 0

Subtask #1 Testcase #1062.136 ms97 MB + 936 KBAcceptedScore: 0

Subtask #1 Testcase #1174.192 ms98 MB + 528 KBAcceptedScore: 0

Subtask #1 Testcase #1275.921 ms97 MB + 408 KBAcceptedScore: 0

Subtask #1 Testcase #1310.721 ms96 MB + 20 KBAcceptedScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-01-18 20:32:14 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠