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 |
|
|
| 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 |