提出 #54929838


ソースコード 拡げる

#include <stdio.h>

void mul_matrix (long long **a, long long **b, int l, int m, int n, long long **ans, long long mod_num) {
  for (int i = 0; i < l; i++) {
    for (int j = 0; j < n; j++) {
      ans[i][j] = 0LL;
      for (int k = 0; k < m; k++) {
        ans[i][j] += a[i][k]*b[k][j];
        ans[i][j] %= mod_num;
      }
    }
  }
  return;
}

long long power_mod (long long a, long long b, long long mod_num) {
  long long ans = 1LL;
  
  if (b > 0LL) {
    ans = power_mod(a, b/2LL, mod_num);
    ans = (ans * ans) % mod_num;
    if (b%2LL == 1LL) {
      ans = (ans * a) % mod_num;
    }
  }
  
  return ans;
}

int main () {
  int t = 0;
  long long n = 0LL;
  
  int res = 0;
  
  long long mod_num = 998244353LL;
  
  long long comb[12][12] = {};
  long long s_obj[6][1][13] = {};
  long long *s[6][1] = {};
  long long s_inv_obj[6][13][1] = {};
  long long *s_inv[6][13] = {};
  
  long long cnt[6] = { 2LL, 12LL, 42LL, 112LL, 252LL, 504LL };
  
  long long invf[12] = {};
  
  for (int i = 0; i < 12; i++) {
    comb[i][0] = 1LL;
    comb[i][i] = 1LL;
    for (int j = 1; j < i; j++) {
      comb[i][j] = (comb[i-1][j-1]+comb[i-1][j])%mod_num;
    }
  }
  
  for (int i = 0; i < 6; i++) {
    s[i][0] = s_obj[i][0];
    for (int j = 0; j < 13; j++) {
      s_inv[i][j] = s_inv_obj[i][j];
    }
  }
  
  for (int i = 0; i < 6; i++) {
    s[i][0][0] = 1LL;
    for (int j = 1; j < 6+i; j++) {
      s[i][0][j] = 0LL;
    }
    for (int j = 6+i; j < 12; j++) {
      s[i][0][j] = comb[j-1][j-i-6];
      if ((j-i)%2 == 1) {
        s[i][0][j] = mod_num-s[i][0][j];
      }
    }
    s[i][0][12] = 1LL;
    for (int j = 0; j < 6+i; j++) {
      s_inv[i][j][0] = mod_num-power_mod(2LL, ((long long)(6+i-j))*(mod_num-2LL), mod_num);
      for (int k = 0; k < 6-i; k++) {
        if (k%2 == 0) {
          s_inv[i][j][0] += comb[5+i-j+k][k];
        } else {
          s_inv[i][j][0] += mod_num-comb[5+i-j+k][k];
        }
      }
      s_inv[i][j][0] %= mod_num;
    }
    for (int j = 6+i; j < 12; j++) {
      s_inv[i][j][0] = mod_num-1LL;
    }
    s_inv[i][12][0] = power_mod(2LL, ((long long)(6+i))*(mod_num-2LL), mod_num);
  }
  
  invf[0] = 1LL;
  for (int i = 1; i < 12; i++) {
    invf[i] = invf[i-1]*power_mod((long long)i, mod_num-2LL, mod_num);
    invf[i] %= mod_num;
  }
  
  res = scanf("%d", &t);
  while (t > 0) {
    res = scanf("%lld", &n);
    if (n < 12LL) {
      printf("0\n");
    } else {
      long long ans = 0LL;
      long long perm[13] = {};
      perm[0] = 1LL;
      for (int i = 0; i < 12; i++) {
        perm[i+1] = perm[i]*(n-((long long)i));
        perm[i+1] %= mod_num;
      }
      for (int i = 0; i < 6; i++) {
        long long wk1_obj[13][13] = {};
        long long *wk1[13] = {};
        long long wk2_obj[1][13] = {};
        long long *wk2[1] = { wk2_obj[0] };
        long long wk3_obj[1][1] = {};
        long long *wk3[1] = { wk3_obj[0] };
        long long tmppow = power_mod(50LL, (n-(long long)(i+5)), mod_num);
        for (int j = 0; j < 13; j++) {
          wk1[j] = wk1_obj[j];
        }
        for (int j = i+5; j >= 0; j--) {
          long long tmp = (perm[j]*invf[j])%mod_num;
          tmp *= tmppow;
          tmp %= mod_num;
          for (int k = 0; k < i+6-j; k++) {
            wk1[k][j+k] = tmp;
          }
          tmppow *= 50LL;
          tmppow %= mod_num;
        }
        tmppow = power_mod(51LL, (n-(long long)(5-i)), mod_num);
        for (int j = 5-i; j >= 0; j--) {
          long long tmp = (perm[j]*invf[j])%mod_num;
          tmp *= tmppow;
          tmp %= mod_num;
          for (int k = 0; k < 6-i-j; k++) {
            wk1[k+i+6][j+k+i+6] = tmp;
          }
          tmppow *= 51LL;
          tmppow %= mod_num;
        }
        wk1[12][12] = power_mod(52LL, n, mod_num);
        mul_matrix(s[i], wk1, 1, 13, 13, wk2, mod_num);
        mul_matrix(wk2, s_inv[i], 1, 13, 1, wk3, mod_num);
        ans += cnt[i]*wk3[0][0];
      }
      printf("%lld\n", ans%mod_num);
    }
    t--;
  }
  
  return 0;
}

提出情報

提出日時
問題 A - Welcome to NPCAPC
ユーザ chro4896
言語 C (gcc 12.2.0)
得点 100
コード長 4152 Byte
結果 AC
実行時間 42 ms
メモリ 1744 KiB

ジャッジ結果

セット名 Sample subtask1 subtask2 All
得点 / 配点 0 / 0 10 / 10 10 / 10 80 / 80
結果
AC × 2
AC × 18
AC × 34
AC × 67
セット名 テストケース
Sample example1_00.txt, example2_00.txt
subtask1 example1_00.txt, subtask1_00.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt
subtask2 example1_00.txt, example2_00.txt, subtask1_00.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask2_00.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt, subtask2_13.txt, subtask2_14.txt
All example1_00.txt, example2_00.txt, subtask1_00.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask2_00.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt, subtask2_13.txt, subtask2_14.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt
ケース名 結果 実行時間 メモリ
example1_00.txt AC 1 ms 1612 KiB
example2_00.txt AC 1 ms 1640 KiB
subtask1_00.txt AC 0 ms 1624 KiB
subtask1_01.txt AC 1 ms 1560 KiB
subtask1_02.txt AC 0 ms 1620 KiB
subtask1_03.txt AC 0 ms 1620 KiB
subtask1_04.txt AC 0 ms 1624 KiB
subtask1_05.txt AC 1 ms 1600 KiB
subtask1_06.txt AC 1 ms 1628 KiB
subtask1_07.txt AC 0 ms 1676 KiB
subtask1_08.txt AC 1 ms 1708 KiB
subtask1_09.txt AC 0 ms 1608 KiB
subtask1_10.txt AC 0 ms 1640 KiB
subtask1_11.txt AC 0 ms 1676 KiB
subtask1_12.txt AC 0 ms 1584 KiB
subtask1_13.txt AC 1 ms 1720 KiB
subtask1_14.txt AC 0 ms 1716 KiB
subtask1_15.txt AC 0 ms 1512 KiB
subtask1_16.txt AC 0 ms 1596 KiB
subtask2_00.txt AC 1 ms 1628 KiB
subtask2_01.txt AC 1 ms 1580 KiB
subtask2_02.txt AC 0 ms 1724 KiB
subtask2_03.txt AC 1 ms 1680 KiB
subtask2_04.txt AC 1 ms 1632 KiB
subtask2_05.txt AC 0 ms 1720 KiB
subtask2_06.txt AC 1 ms 1620 KiB
subtask2_07.txt AC 0 ms 1620 KiB
subtask2_08.txt AC 0 ms 1740 KiB
subtask2_09.txt AC 1 ms 1716 KiB
subtask2_10.txt AC 0 ms 1744 KiB
subtask2_11.txt AC 1 ms 1712 KiB
subtask2_12.txt AC 1 ms 1620 KiB
subtask2_13.txt AC 1 ms 1712 KiB
subtask2_14.txt AC 0 ms 1604 KiB
test_00.txt AC 39 ms 1608 KiB
test_01.txt AC 39 ms 1616 KiB
test_02.txt AC 39 ms 1708 KiB
test_03.txt AC 39 ms 1620 KiB
test_04.txt AC 39 ms 1576 KiB
test_05.txt AC 39 ms 1704 KiB
test_06.txt AC 39 ms 1620 KiB
test_07.txt AC 39 ms 1708 KiB
test_08.txt AC 39 ms 1720 KiB
test_09.txt AC 39 ms 1644 KiB
test_10.txt AC 39 ms 1628 KiB
test_11.txt AC 39 ms 1740 KiB
test_12.txt AC 39 ms 1620 KiB
test_13.txt AC 39 ms 1628 KiB
test_14.txt AC 39 ms 1624 KiB
test_15.txt AC 39 ms 1604 KiB
test_16.txt AC 39 ms 1620 KiB
test_17.txt AC 39 ms 1600 KiB
test_18.txt AC 39 ms 1632 KiB
test_19.txt AC 39 ms 1708 KiB
test_20.txt AC 40 ms 1716 KiB
test_21.txt AC 39 ms 1676 KiB
test_22.txt AC 39 ms 1584 KiB
test_23.txt AC 39 ms 1560 KiB
test_24.txt AC 39 ms 1724 KiB
test_25.txt AC 41 ms 1728 KiB
test_26.txt AC 40 ms 1736 KiB
test_27.txt AC 40 ms 1716 KiB
test_28.txt AC 40 ms 1580 KiB
test_29.txt AC 41 ms 1624 KiB
test_30.txt AC 41 ms 1680 KiB
test_31.txt AC 42 ms 1640 KiB
test_32.txt AC 40 ms 1720 KiB