Submission #2042287
Source Code Expand
#define _CRT_SECURE_NO_WARNINGS #include <array> #include <cstdio> using namespace std; const int INF = 1000000007; const int MAX_N = 100; const int MAX_K = 500; array<int, MAX_N + MAX_K> FCT; array<int, MAX_N + MAX_K> INV; int modmulti(int a, int b) { int res = 0; int mod = a % INF; while (b > 0) { if ((b & 1) == 1) { res += mod; if (res > INF) { res -= INF; } } mod <<= 1; if (mod > INF) { mod -= INF; } b >>= 1; } return res; } int modcalc(int a, int b) { // O(log b) int d = 0; if (b == 0) { return 1; } else if ((b & 1) == 0) { // 偶数 bを半分にできる d = modcalc(a, b / 2); return modmulti(d, d); } else { // 奇数 -1乗から1乗をかける return modmulti(a, modcalc(a, b - 1)); } } int combination(int a, int b) { // tmp = a! / b! int tmp = modmulti(FCT[a], INV[b]); // tmp / (a - b)! return modmulti(tmp, INV[a - b]); } void factorial(int x) { FCT[0] = 1; FCT[1] = 1; for (int i = 2; i <= x; i++) { FCT[i] = modmulti(FCT[i - 1], i); } } void inverse(int x) { INV[0] = 1; INV[1] = 1; INV[x] = modcalc(FCT[x], INF - 2); for (int i = x - 1; 2 <= i; i--) { INV[i] = modmulti(INV[i + 1], i + 1); } } int main() { int N, K; if (scanf("%d%d", &N, &K) < 2) return 0; // 階乗テーブル作成 factorial(N + K - 1); // 逆元テーブル作成 inverse(N + K - 1); int ans; if (K < N) { // 「N 種類のものから重複を許して K 個選ぶ」方法と // 「K 個の ○ と N-1 個の |(仕切り)を 1 列に並べる」方法は // 1 対 1 に対応する // nHk = (n+k-1)Ck // (n+k-1)Ck ans = combination(N + K - 1, K); } else { // nCk%n ans = combination(N, K % N); } printf("%d\n", ans); return 0; }
Submission Info
Submission Time | |
---|---|
Task | B - 高橋幼稚園 |
User | ShinjiSHIBATA |
Language | C++14 (GCC 5.4.1) |
Score | 100 |
Code Size | 2222 Byte |
Status | AC |
Exec Time | 1 ms |
Memory | 128 KB |
Judge Result
Set Name | Sample | Subtask1 | Subtask2 | ||||||
---|---|---|---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 80 / 80 | 20 / 20 | ||||||
Status |
|
|
|
Set Name | Test Cases |
---|---|
Sample | subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt |
Subtask1 | subtask0_sample_01.txt, subtask0_sample_02.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, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt |
Subtask2 | subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.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, subtask1_17.txt, subtask1_18.txt, subtask1_19.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 |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
subtask0_sample_01.txt | AC | 1 ms | 128 KB |
subtask0_sample_02.txt | AC | 1 ms | 128 KB |
subtask0_sample_03.txt | AC | 1 ms | 128 KB |
subtask1_01.txt | AC | 1 ms | 128 KB |
subtask1_02.txt | AC | 1 ms | 128 KB |
subtask1_03.txt | AC | 1 ms | 128 KB |
subtask1_04.txt | AC | 1 ms | 128 KB |
subtask1_05.txt | AC | 1 ms | 128 KB |
subtask1_06.txt | AC | 1 ms | 128 KB |
subtask1_07.txt | AC | 1 ms | 128 KB |
subtask1_08.txt | AC | 1 ms | 128 KB |
subtask1_09.txt | AC | 1 ms | 128 KB |
subtask1_10.txt | AC | 1 ms | 128 KB |
subtask1_11.txt | AC | 1 ms | 128 KB |
subtask1_12.txt | AC | 1 ms | 128 KB |
subtask1_13.txt | AC | 1 ms | 128 KB |
subtask1_14.txt | AC | 1 ms | 128 KB |
subtask1_15.txt | AC | 1 ms | 128 KB |
subtask1_16.txt | AC | 1 ms | 128 KB |
subtask1_17.txt | AC | 1 ms | 128 KB |
subtask1_18.txt | AC | 1 ms | 128 KB |
subtask1_19.txt | AC | 1 ms | 128 KB |
subtask2_01.txt | AC | 1 ms | 128 KB |
subtask2_02.txt | AC | 1 ms | 128 KB |
subtask2_03.txt | AC | 1 ms | 128 KB |
subtask2_04.txt | AC | 1 ms | 128 KB |
subtask2_05.txt | AC | 1 ms | 128 KB |
subtask2_06.txt | AC | 1 ms | 128 KB |
subtask2_07.txt | AC | 1 ms | 128 KB |
subtask2_08.txt | AC | 1 ms | 128 KB |
subtask2_09.txt | AC | 1 ms | 128 KB |
subtask2_10.txt | AC | 1 ms | 128 KB |
subtask2_11.txt | AC | 1 ms | 128 KB |