社区讨论
求助玄学T
P4238【模板】多项式乘法逆参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo2ay5et
- 此快照首次捕获于
- 2023/10/23 10:52 2 年前
- 此快照最后确认于
- 2023/11/03 11:03 2 年前
常熟大的一批
重构五六遍了
code:
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 4e5 + 10;
const int mod = 998244353, G = 3;
int N;
int f[maxn];
int h[30][maxn];
int k, siz;
int rev[maxn];
void init(){
k = 1; siz = 0; while(k < (2*N + 1)) k <<= 1, siz++; k--;
for (int i = 0; i <= k; i++) rev[i] = ((rev[i >> 1] >> 1) | ((i&1) << (siz-1)));
}
int fpow(int x, int y){
int ans = 1;
for (int bas = x; y; bas = (bas * bas) % mod, y >>= 1) if(y&1) ans = (ans * bas) % mod;
return ans;
}
int inv(int x){ return fpow(x, mod-2);}
void ntt(int A[], int n, int isinv){
for (int i = 0; i < n; i++) if(rev[i] < i) swap(A[i], A[rev[i]]);
for (int len = 2, mid, step; len <= n; len <<= 1){
mid = (len >> 1);
step = fpow((isinv == 1 ? G : inv(G)), (mod-1)/len);
for (int j = 0, w, x, y; j < n; j += len){
w = 1;
for (int k = 0; k <= mid - 1; k++, w = w * step % mod){
x = A[j + k]; y = w * A[j + k + mid] % mod;
A[j + k] = (x + y) % mod; A[j + k + mid] = (x - y + mod) % mod;
}
}
}
if(isinv == -1) {
int ni = inv(n);
for (int i = 0; i < n; i++) A[i] = A[i] * ni % mod;
}
}
void cpy(int A[], int B[], int n){
for (int i = 0; i <= n; i++) A[i] = B[i];
for (int i = n+1; i <= k; i++) A[i] = 0;
}
int x[maxn], y[maxn];
void mul(int A[], int B[], int n){
cpy(x, A, n); cpy(y, B, n);
ntt(x, n+1, 1); ntt(y, n+1, 1);
for (int i = 0; i <= n; i++) x[i] = x[i] * y[i] %mod;
ntt(x, n+1, -1);
cpy(A, x, n);
}
signed main(){
cin >> N; N--;
for (int i = 0 ; i <= N; i++) cin >> f[i];
init();
h[0][0] = inv(f[0]);
int cnt = 0;
for (int z = 2, flg = 0; z <= N || flg == 0; z <<= 1){
if(z > N) flg = 1;
cnt++;
cpy(h[cnt], h[cnt-1], ((z << 1) - 1));
mul(h[cnt], f, k);
for (int i = 0; i <= k; i++) h[cnt][i] = (mod - h[cnt][i]) % mod; h[cnt][0] += 2;
mul(h[cnt], h[cnt-1], k);
for (int i = z; i <= k; i++) h[cnt][i] = 0;
}
for (int i = 0; i <= N; i++) cout << h[cnt][i] <<" ";
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...