提交记录 11990
| 用户 | 题目 | 状态 | 得分 | 用时 | 内存 | 语言 | 代码长度 |
|---|---|---|---|---|---|---|---|
| hotwords | 1002. 测测你的多项式乘法 | Compile Error | 0 | 0 ns | 0 KB | C++ | 1.81 KB |
| 提交时间 | 评测时间 |
|---|---|
| 2020-03-05 22:57:54 | 2020-08-01 02:49:52 |
#include <algorithm>
typedef long long ll;
const int N = 2100000, S = N;
const int cIz = 998244353, g_cIz = 3;
inline int _(int a) { return a + ((a >> 31) & cIz); }
inline int __(int a) { return a - (((cIz - 1 - a) >> 31) & cIz); }
inline int Pow(int a, int b) {
int ans = 1;
for (; b; b >>= 1) {
if (b & 1)
ans = (ll)ans * a % cIz;
a = (ll)a * a % cIz;
}
return ans;
}
inline int Inv(int a) { return Pow(a, cIz - 2); }
inline int getn(int m) {
int n = 1;
while (n < m) n <<= 1;
return n;
}
int rev[S];
inline void init_rev(int n) {
rev[0] = 0;
for (int i = 1; i < n; ++i) {
rev[i] = rev[i >> 1] >> 1 | ((i & 1) * n) >> 1;
}
}
void NTT(int *f, int n, bool flag) {
for (int i = 0; i < n; ++i) {
if (i < rev[i])
std::swap(f[i], f[rev[i]]);
}
const int g = flag ? Inv(g_cIz) : g_cIz;
for (int i = 1; i < n; i <<= 1) {
const int e = Pow(g, (cIz - 1) / (i << 1));
for (int j = 0; j < n; j += i << 1) {
int w = 1;
for (int k = 0; k < i; ++k) {
int tmp = (ll)w * f[j | k | i] % cIz;
f[j | k | i] = _(f[j | k] - tmp);
f[j | k] = __(f[j | k] + tmp);
w = (ll)w * e % cIz;
}
}
}
if (flag) {
const int inv_n = Inv(n);
for (int i = 0; i < n; ++i) f[i] = (ll)f[i] * inv_n % cIz;
}
}
void poly_mul(const int *A, const int *B, int *C, int n) {
static int a[S], b[S];
init_rev(n);
std::copy(A, A + n, a);
std::copy(B, B + n, b);
NTT(a, n, 0);
NTT(b, n, 0);
for (int i = 0; i < n; ++i) C[i] = (ll)a[i] * b[i] % cIz;
NTT(C, n, 1);
}
void poly_multiply(unsigned *a, int n, unsigned *b, int m, unsigned *c)
{
++n;
++m;
poly_mul(a, b, c, getn(n + m - 1));
}
| Compilation | N/A | N/A | Compile Error | Score: N/A | 显示更多 |
Judge Duck Online | 评测鸭在线
Server Time: 2026-03-26 20:07:03 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠