Submission #37811802


Source Code Expand

#include <iostream>
#include <numeric>
#include <utility>
#include <vector>
using namespace std;
#include "atcoder/modint.hpp"
using mint = atcoder::modint;

struct Binomial {
  vector<mint> fac, invfac, inv;
  Binomial(int n) : fac(n + 1), invfac(n + 1), inv(n + 1) {
    fac[0] = invfac[0] = inv[0] = 1;
    for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i;
    invfac[n] = fac[n].inv();
    for (int i = n - 1; i >= 0; i--) {
      invfac[i] = invfac[i + 1] * (i + 1);
      inv[i + 1] = invfac[i + 1] * fac[i];
    }
  }
  mint operator()(int n, int r) {
    if (n < 0 || r < 0 || n < r) return 0;
    return fac[n] * invfac[n - r] * invfac[r];
  }
};

mint inner_calc(int N, int K) {
  Binomial C{100};
  mint ans = 0;
  vector<pair<int, int>> v;
  auto dfs = [&](auto rc, int n, int last) -> void {
    if (n == 0) {
      mint cur = 1;
      for (int i = 0; i < (int)v.size(); i++) {
        auto [cyc1, num1] = v[i];
        cur /= C.fac[num1] * (mint{cyc1}.pow(num1));
        cur *= mint{K}.pow(num1);
        cur *= mint{2}.pow(cyc1 / 2 * num1);
        cur *= mint{2}.pow(cyc1 * num1 * (num1 - 1) / 2);
        for (int j = 0; j < i; j++) {
          auto [cyc2, num2] = v[j];
          cur *= mint{2}.pow(gcd(cyc1, cyc2) * num1 * num2);
        }
      }
      ans += cur;
      return;
    }
    for (int nxt = last + 1; nxt <= n; nxt++) {
      for (int i = 1; nxt * i <= n; i++) {
        v.emplace_back(nxt, i);
        rc(rc, n - nxt * i, nxt);
        v.pop_back();
      }
    }
  };
  dfs(dfs, N, 0);
  return ans;
}

int main() {
  int N, K, mod;
  cin >> N >> K >> mod;
  mint::set_mod(mod);

  Binomial C{100};
  mint ans = 0;
  for (int k = 1; k <= K; k++) {
    ans += inner_calc(N, k) * C(K, k) * (k % 2 == K % 2 ? 1 : -1);
  }
  cout << ans.val() << endl;
}

Submission Info

Submission Time
Task Ex - Count Unlabeled Graphs
User Nyaan
Language C++ (GCC 9.2.1)
Score 600
Code Size 1860 Byte
Status AC
Exec Time 146 ms
Memory 3596 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 4
AC × 23
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 01_small_00.txt, 01_small_01.txt, 01_small_02.txt, 01_small_03.txt, 02_random_00.txt, 02_random_01.txt, 02_random_02.txt, 02_random_03.txt, 02_random_04.txt, 02_random_05.txt, 02_random_06.txt, 02_random_07.txt, 02_random_08.txt, 02_random_09.txt, 03_max_00.txt, 03_max_01.txt, 03_max_02.txt, 03_max_03.txt, 03_max_04.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 8 ms 3500 KiB
00_sample_01.txt AC 3 ms 3464 KiB
00_sample_02.txt AC 2 ms 3468 KiB
00_sample_03.txt AC 78 ms 3564 KiB
01_small_00.txt AC 2 ms 3352 KiB
01_small_01.txt AC 2 ms 3508 KiB
01_small_02.txt AC 2 ms 3556 KiB
01_small_03.txt AC 3 ms 3424 KiB
02_random_00.txt AC 3 ms 3480 KiB
02_random_01.txt AC 4 ms 3592 KiB
02_random_02.txt AC 9 ms 3424 KiB
02_random_03.txt AC 3 ms 3572 KiB
02_random_04.txt AC 2 ms 3596 KiB
02_random_05.txt AC 26 ms 3352 KiB
02_random_06.txt AC 3 ms 3356 KiB
02_random_07.txt AC 5 ms 3400 KiB
02_random_08.txt AC 2 ms 3592 KiB
02_random_09.txt AC 6 ms 3464 KiB
03_max_00.txt AC 146 ms 3504 KiB
03_max_01.txt AC 136 ms 3504 KiB
03_max_02.txt AC 134 ms 3404 KiB
03_max_03.txt AC 78 ms 3364 KiB
03_max_04.txt AC 123 ms 3564 KiB