本地AC提交WA
查看原帖
本地AC提交WA
480778
Charles_Fan楼主2023/10/24 14:32

下载的第一组数据:
P7961-1.in:

8 9 1
499488183 118995914 332316574 399234563 246850128 338768262 489466833 673193710 723933572 12759125

P7961-1.out:

789420212

在本地可以正确输出结果:

/media/c/D/Cod/I/O/Luogu ❯  g++ P7961.cpp -std=c++14 -Wall -o P7961.cpp.out && ./P7961.cpp.out < ~/Downloads/P7961_1.in 
789420212

但是提交后WA:Wrong Answer.wrong answer On line 1 column 1, read 2, expected 7.
为什么呢qwq
代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const ll N = 40, M = 110, mod = 998244353;

ll dp[M][N][N][N], wei[M][N], C[N][N], popcnt[N];
int n, m, q;

#define low_bit(x) ((x) & (-1 * (x)))
int count(int x) {
  int ret = 0;
  while (x) {
    x -= low_bit(x);
    ret++;
  }
  return ret;
}

void pre() {
  C[0][0] = 1;
  for (int i = 1; i <= 30; i++) {
    C[i][0] = 1;
    for (int j = 1; j <= i; j++) {
      C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % mod;
    }
  }
  for (int i = 0; i <= 100; i++) popcnt[i] = count(i);
}

int main() {
  pre();
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 0; i <= m; i++) {
    wei[i][0] = 1;
    scanf("%lld", &wei[i][1]);
    for (int j = 2; j <= n; j++) wei[i][j] = wei[i][j - 1] * wei[i][1] % mod;
  }
  dp[0][0][0][0] = 1;
  for (int i = 0; i <= m; i++)
    for (int j = 0; j <= n; j++)
      for (int k = 0; k <= q; k++)
        for (int l = 0; l <= (n >> 1); l++)
          for (int o = 0; o <= n - j; o++) {
            dp[i + 1][j + o][k + ((o + l) & 1)][(o + l) >> 1] =
                (dp[i + 1][j + o][k + ((o + l) & 1)][(o + l) >> 1] +
                 ((dp[i][j][k][l] * wei[i][o]) % mod) * C[n - j][o] % mod) %
                mod;
          }
  ll ans = 0;
  for (int i = 0; i <= q; i++)
    for (int j = 0; j <= (n >> 1); j++)
      if (i + popcnt[j] <= q) ans = (ans + dp[m + 1][n][i][j]) % mod;
  printf("%lld\n", ans);
  return 0;
}
2023/10/24 14:32
加载中...