社区讨论

萌新初学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 条回复,欢迎继续交流。

正在加载回复...