Submission #69187129
Source Code Expand
#include <bits/stdc++.h>
#include <atcoder/convolution>
using namespace std;
using namespace atcoder;
int mod = 998244353;
// (a^p)%mod の long long 内計算(法<2^31.5に限る)
long long power_mod(long long a, long long p) {
if (p==0) return 1LL;
if (p&1LL) {
return (power_mod(a,p-1)*a)%mod;
} else {
long long tmp = power_mod(a,p>>1);
return tmp*tmp%mod;
}
}
// mod上での逆数計算(法<2^31.5に限る)
long long inverse(long long a) {
return power_mod(a,mod-2);
}
/////////////////// メイン ///////////////////
int main () {
//////////////////// 入力 ////////////////////
int n, a, b, c;
cin >> n >> a >> b >> c;
int mod = 998244353;
//////////////// 出力変数定義 ////////////////
int result1, result2;
//////////////////// 処理 ////////////////////
// n!までの階乗を用意
vector<long long> factorial(n+1,0);
factorial.at(0) = 1;
for (int i=1; i<=n; i++) {
factorial.at(i) = factorial.at(i-1)*i%mod;
}
// 形式的べき級数用のvector
vector<int> pa(n+1,0);
vector<int> pb(n+1,0);
vector<int> pc(n+1,0);
// それぞれの箱の中で条件を満たす入れ方を数える
for (int i=0; i<=n; i+=a) {
pa.at(i) = 1;
}
for (int i=0; i<=n; i+=b) {
pb.at(i) = 1;
}
for (int i=0; i<=n; i+=c) {
pc.at(i) = 1;
}
// 3つを畳み込んで、n次の係数が答え
vector<int> tmp1 = convolution<998244353>(pa,pb);
tmp1.resize(n+1);
vector<int> p1 = convolution<998244353>(tmp1,pc);
p1.resize(n+1);
result1 = p1.at(n);
// n!/(na!*nb!*nc!)をかけたいので、畳み込む前に個数の階乗で割った状態を作る
for (int i=0; i<=n; i+=a) {
pa.at(i) *= inverse(factorial.at(i));
}
for (int i=0; i<=n; i+=b) {
pb.at(i) *= inverse(factorial.at(i));
}
for (int i=0; i<=n; i+=c) {
pc.at(i) *= inverse(factorial.at(i));
}
// 3つを畳み込んで、n次の係数にn!をかけたものが答え
vector<int> tmp2 = convolution<998244353>(pa,pb);
tmp2.resize(n+1);
vector<int> p2 = convolution<998244353>(tmp2,pc);
p2.resize(n+1);
result2 = p2.at(n)*factorial.at(n)%mod;
//////////////////// 出力 ////////////////////
cout << result1 << endl;
cout << result2 << endl;
//////////////////// 終了 ////////////////////
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | G - Balls and Boxes |
| User | wightou |
| Language | C++ 23 (gcc 12.2) |
| Score | 575 |
| Code Size | 2435 Byte |
| Status | AC |
| Exec Time | 596 ms |
| Memory | 29124 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 575 / 575 | ||||
| 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_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 02_corner_00.txt, 02_corner_01.txt, 02_corner_02.txt, 02_corner_03.txt, 02_corner_04.txt, 02_corner_05.txt, 02_corner_06.txt, 02_corner_07.txt, 02_corner_08.txt, 02_corner_09.txt, 02_corner_10.txt, 02_corner_11.txt, 02_corner_12.txt, 02_corner_13.txt, 02_corner_14.txt, 02_corner_15.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00_sample_00.txt | AC | 1 ms | 3552 KiB |
| 00_sample_01.txt | AC | 2 ms | 3568 KiB |
| 00_sample_02.txt | AC | 233 ms | 28960 KiB |
| 00_sample_03.txt | AC | 7 ms | 4012 KiB |
| 01_random_00.txt | AC | 146 ms | 21892 KiB |
| 01_random_01.txt | AC | 367 ms | 28960 KiB |
| 01_random_02.txt | AC | 123 ms | 16388 KiB |
| 01_random_03.txt | AC | 309 ms | 29024 KiB |
| 01_random_04.txt | AC | 111 ms | 20192 KiB |
| 01_random_05.txt | AC | 211 ms | 29048 KiB |
| 01_random_06.txt | AC | 107 ms | 16608 KiB |
| 01_random_07.txt | AC | 213 ms | 28964 KiB |
| 01_random_08.txt | AC | 106 ms | 16476 KiB |
| 01_random_09.txt | AC | 211 ms | 29012 KiB |
| 01_random_10.txt | AC | 108 ms | 17868 KiB |
| 01_random_11.txt | AC | 210 ms | 29020 KiB |
| 02_corner_00.txt | AC | 596 ms | 28912 KiB |
| 02_corner_01.txt | AC | 596 ms | 28972 KiB |
| 02_corner_02.txt | AC | 447 ms | 28960 KiB |
| 02_corner_03.txt | AC | 446 ms | 28884 KiB |
| 02_corner_04.txt | AC | 350 ms | 28820 KiB |
| 02_corner_05.txt | AC | 351 ms | 28952 KiB |
| 02_corner_06.txt | AC | 298 ms | 29044 KiB |
| 02_corner_07.txt | AC | 298 ms | 29124 KiB |
| 02_corner_08.txt | AC | 255 ms | 28912 KiB |
| 02_corner_09.txt | AC | 254 ms | 28852 KiB |
| 02_corner_10.txt | AC | 210 ms | 28916 KiB |
| 02_corner_11.txt | AC | 211 ms | 29004 KiB |
| 02_corner_12.txt | AC | 211 ms | 28876 KiB |
| 02_corner_13.txt | AC | 211 ms | 28936 KiB |
| 02_corner_14.txt | AC | 124 ms | 17840 KiB |
| 02_corner_15.txt | AC | 127 ms | 21748 KiB |