社区讨论
萌新初学OI求助卡常
P10461多项式复合集合幂级数参与者 4已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @mdjsa4vs
- 此快照首次捕获于
- 2025/07/26 13:02 7 个月前
- 此快照最后确认于
- 2025/11/04 03:42 4 个月前
倒数第二个点卡到 2s 了最后一个点还死活过不去,有没有巨佬救救人傻常数大选手。
code:
CPP#pragma optimize(3)
#pragma target("avx")
#pragma optimize("Ofast")
#pragma optimize("inline")
#pragma optimize("-fgcse")
#pragma optimize("-fgcse-lm")
#pragma optimize("-fipa-sra")
#pragma optimize("-ftree-pre")
#pragma optimize("-ftree-vrp")
#pragma optimize("-fpeephole2")
#pragma optimize("-ffast-math")
#pragma optimize("-fsched-spec")
#pragma optimize("unroll-loops")
#pragma optimize("-falign-jumps")
#pragma optimize("-falign-loops")
#pragma optimize("-falign-labels")
#pragma optimize("-fdevirtualize")
#pragma optimize("-fcaller-saves")
#pragma optimize("-fcrossjumping")
#pragma optimize("-fthread-jumps")
#pragma optimize("-funroll-loops")
#pragma optimize("-fwhole-program")
#pragma optimize("-freorder-blocks")
#pragma optimize("-fschedule-insns")
#pragma optimize("inline-functions")
#pragma optimize("-ftree-tail-merge")
#pragma optimize("-fschedule-insns2")
#pragma optimize("-fstrict-aliasing")
#pragma optimize("-fstrict-overflow")
#pragma optimize("-falign-functions")
#pragma optimize("-fcse-skip-blocks")
#pragma optimize("-fcse-follow-jumps")
#pragma optimize("-fsched-interblock")
#pragma optimize("-fpartial-inlining")
#pragma optimize("no-stack-protector")
#pragma optimize("-freorder-functions")
#pragma optimize("-findirect-inlining")
#pragma optimize("-fhoist-adjacent-loads")
#pragma optimize("-frerun-cse-after-loop")
#pragma optimize("inline-small-functions")
#pragma optimize("-finline-small-functions")
#pragma optimize("-ftree-switch-conversion")
#pragma optimize("-foptimize-sibling-calls")
#pragma optimize("-fexpensive-optimizations")
#pragma optimize("-funsafe-loop-optimizations")
#pragma optimize("inline-functions-called-once")
#pragma optimize("-fdelete-null-pointer-checks")
#pragma optimize(2)
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
using _i = __int128;
const int kMaxN = 21, kMaxS = 1 << 21, kM = 998244353;
int f[kMaxS], g[kMaxS], n;
int tmp[kMaxS], op[kMaxN];
int cnt[kMaxS];
_i a[kMaxN][kMaxS], b[kMaxN][kMaxS];
LL p[kMaxN];
LL P(LL x, LL y) {
LL ans = 1;
for (LL i = 1; i <= y; i <<= 1, x = x * x % kM) {
(y & i) && (ans = ans * x % kM);
}
return ans;
}
inline void FWT(int n, _i *a, int op) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < 1 << n; j++) {
(j & (1 << i)) && (a[j] += a[j ^ (1 << i)] * op);
}
}
}
inline void SubMul(int n, int *f, int *g, int *h) {
for (int i = 0; i < 1 << n; i++) {
for (int j = 0; j <= n; j++) {
a[j][i] = b[j][i] = 0;
}
a[cnt[i]][i] = f[i], b[cnt[i]][i] = g[i];
}
for (int i = 0; i <= n; i++) {
FWT(n, a[i], 1), FWT(n, b[i], 1);
}
for (int i = 0; i < 1 << n; i++) {
for (int j = n; j >= 0; j--) {
a[j][i] = a[j][i] * b[0][i];
for (int k = 0; k < j; k++) {
a[j][i] += a[k][i] * b[j - k][i];
}
}
}
for (int i = 0; i <= n; i++) {
FWT(n, a[i], -1);
}
for (int i = 0; i < 1 << n; i++) {
h[i] = a[cnt[i]][i] % kM;
}
}
inline void Calc(int *f, int *g, int *op, int n) {
g[0] = op[n] * p[n] % kM;
for (int k = n - 1; k >= 0; k--) {
tmp[0] = p[k] * op[k] % kM;
for (int j = 0; j < n - k; j++) {
SubMul(j, g, f + (1 << j), tmp + (1 << j));
}
for (int j = 0; j < 1 << n - k; j++) {
g[j] = tmp[j];
}
}
}
int main() {
ios ::sync_with_stdio(0), cin.tie(0), cout.tie(0);
p[0] = 1;
for (int i = 1; i < kMaxN; i++) {
p[i] = p[i - 1] * i % kM;
}
cin >> n;
for (int i = 0; i < 1 << n; i++) {
cin >> f[i];
}
for (int i = 0; i <= n; i++) {
cin >> op[i];
}
for (int i = 1; i < 1 << n; i++) {
cnt[i] = cnt[i - (i & -i)] + 1;
}
Calc(f, g, op, n);
for (int i = 0; i < 1 << n; i++) {
cout << (g[i] % kM + kM) % kM << " ";
}
return 0;
}
回复
共 6 条回复,欢迎继续交流。
正在加载回复...