提出 #69691455
ソースコード 拡げる
#include <bits/stdc++.h>
#include <atcoder/modint>
using namespace std;
using u32 = uint32_t;
using namespace atcoder;
vector<u32> primes; // M の素因数
struct Modint {
modint x; // M と互いに素な部分
array<int, 9> pc; // pc[i] := primes[i] が何個掛けられているか?
Modint() {}
Modint(u32 a): pc{} {
assert(a > 0);
for (u32 i = 0; i < size(primes); i++) {
const u32 p = primes[i];
while (a % p == 0) {
a /= p;
pc[i]++;
}
}
x = a;
}
Modint& operator*=(const Modint& rhs) {
x *= rhs.x;
for (u32 i = 0; i < size(primes); i++) {
pc[i] += rhs.pc[i];
}
return *this;
}
friend Modint operator*(const Modint& lhs, const Modint& rhs) {
return Modint(lhs) *= rhs;
}
Modint inv() const {
Modint res = *this;
res.x = x.inv();
for (int& c : res.pc) c = -c;
return res;
}
u32 val() const {
auto v = x;
for (u32 i = 0; i < size(primes); i++) {
const modint p = primes[i];
int c = pc[i];
assert(c >= 0);
while (c--) {
auto v2 = v * p;
if (v == v2) break;
v = v2;
}
}
return v.val();
}
};
constexpr u32 MAX = 5000;
Modint fac[MAX + 1], inv[MAX + 1];
int main(){
cin.tie(0)->sync_with_stdio(0);
u32 T, M;
cin >> T >> M;
modint::set_mod(M);
// primes := (M の素因数) を計算
for (u32 p = 2; p * p <= M; p++) {
if (M % p == 0) {
primes.push_back(p);
do M /= p;
while (M % p == 0);
}
}
if (M > 1) primes.push_back(M);
// 階乗前計算
fac[0] = 1;
for (u32 i = 1; i <= MAX; i++) fac[i] = fac[i - 1] * Modint(i);
inv[MAX] = fac[MAX].inv();
for (u32 i = MAX; i >= 1; i--) inv[i - 1] = inv[i] * Modint(i);
// 答えの計算
while (T--) {
u32 N;
cin >> N;
Modint ans = 1;
u32 sumC = 0;
while (N--) {
u32 C;
cin >> C;
ans *= inv[C];
sumC += C;
}
ans *= fac[sumC];
cout << ans.val() << '\n';
}
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | E - Count Sequences 2 |
| ユーザ | tatyam |
| 言語 | C++ 23 (gcc 12.2) |
| 得点 | 450 |
| コード長 | 2420 Byte |
| 結果 | AC |
| 実行時間 | 36 ms |
| メモリ | 4044 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 450 / 450 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | 00_sample_00.txt, 00_sample_01.txt |
| All | 00_sample_00.txt, 00_sample_01.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt, 01_test_35.txt, 01_test_36.txt, 01_test_37.txt, 01_test_38.txt, 01_test_39.txt, 01_test_40.txt, 01_test_41.txt, 01_test_42.txt, 01_test_43.txt, 01_test_44.txt, 01_test_45.txt, 01_test_46.txt, 01_test_47.txt, 01_test_48.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00_sample_00.txt | AC | 1 ms | 3812 KiB |
| 00_sample_01.txt | AC | 1 ms | 3904 KiB |
| 01_test_00.txt | AC | 9 ms | 3916 KiB |
| 01_test_01.txt | AC | 13 ms | 3916 KiB |
| 01_test_02.txt | AC | 17 ms | 4044 KiB |
| 01_test_03.txt | AC | 9 ms | 4040 KiB |
| 01_test_04.txt | AC | 13 ms | 4004 KiB |
| 01_test_05.txt | AC | 18 ms | 3916 KiB |
| 01_test_06.txt | AC | 11 ms | 3832 KiB |
| 01_test_07.txt | AC | 18 ms | 3908 KiB |
| 01_test_08.txt | AC | 21 ms | 3840 KiB |
| 01_test_09.txt | AC | 9 ms | 3812 KiB |
| 01_test_10.txt | AC | 15 ms | 3920 KiB |
| 01_test_11.txt | AC | 19 ms | 3852 KiB |
| 01_test_12.txt | AC | 9 ms | 3876 KiB |
| 01_test_13.txt | AC | 14 ms | 3820 KiB |
| 01_test_14.txt | AC | 20 ms | 3880 KiB |
| 01_test_15.txt | AC | 9 ms | 3852 KiB |
| 01_test_16.txt | AC | 13 ms | 3904 KiB |
| 01_test_17.txt | AC | 19 ms | 3904 KiB |
| 01_test_18.txt | AC | 9 ms | 3916 KiB |
| 01_test_19.txt | AC | 14 ms | 3920 KiB |
| 01_test_20.txt | AC | 19 ms | 3920 KiB |
| 01_test_21.txt | AC | 10 ms | 3880 KiB |
| 01_test_22.txt | AC | 16 ms | 4004 KiB |
| 01_test_23.txt | AC | 20 ms | 4004 KiB |
| 01_test_24.txt | AC | 10 ms | 3912 KiB |
| 01_test_25.txt | AC | 16 ms | 3852 KiB |
| 01_test_26.txt | AC | 20 ms | 3816 KiB |
| 01_test_27.txt | AC | 14 ms | 3912 KiB |
| 01_test_28.txt | AC | 29 ms | 3836 KiB |
| 01_test_29.txt | AC | 26 ms | 3820 KiB |
| 01_test_30.txt | AC | 10 ms | 4036 KiB |
| 01_test_31.txt | AC | 17 ms | 3892 KiB |
| 01_test_32.txt | AC | 20 ms | 3820 KiB |
| 01_test_33.txt | AC | 9 ms | 3976 KiB |
| 01_test_34.txt | AC | 14 ms | 3912 KiB |
| 01_test_35.txt | AC | 19 ms | 4004 KiB |
| 01_test_36.txt | AC | 9 ms | 3912 KiB |
| 01_test_37.txt | AC | 13 ms | 3908 KiB |
| 01_test_38.txt | AC | 17 ms | 3916 KiB |
| 01_test_39.txt | AC | 10 ms | 3792 KiB |
| 01_test_40.txt | AC | 16 ms | 3920 KiB |
| 01_test_41.txt | AC | 20 ms | 3912 KiB |
| 01_test_42.txt | AC | 11 ms | 3852 KiB |
| 01_test_43.txt | AC | 19 ms | 3916 KiB |
| 01_test_44.txt | AC | 21 ms | 3908 KiB |
| 01_test_45.txt | AC | 10 ms | 3820 KiB |
| 01_test_46.txt | AC | 16 ms | 3908 KiB |
| 01_test_47.txt | AC | 20 ms | 3920 KiB |
| 01_test_48.txt | AC | 36 ms | 3908 KiB |