Submission #69119838


Source Code Expand

#include <algorithm>
#include <iostream>
#include <vector>

#include <atcoder/all>

int main()
{
    using namespace std;
    int n, a, b, c;
    cin >> n >> a >> b >> c;
    using mint = atcoder::modint998244353;
    int nn = n + 1;

    vector<mint> fact(nn, 1), invfact(nn, 1);
    for (int i = 0; i < nn - 1; i++) fact[i + 1] = fact[i] * (i + 1);
    invfact[nn - 1] = fact[nn - 1].inv();
    for (int i = nn - 2; i >= 0; i--) invfact[i] = invfact[i + 1] * (i + 1);


    auto solve1 = [&] {
        vector<mint> f(n + 1);
        f[0] = 1;
        for (int p : {a, b, c}) {
            for (int i = 0; i < nn - p; ++i) {
                f[i + p] += f[i];
            }
        }
        return f[n];
    };
    cout << solve1().val() << "\n";
    auto solve2 = [&] {
        vector<mint> f(n + 1);
        f[0] = fact[n];
        for (int p : {a, b, c}) {
            vector<mint> fp(n + 1);
            for (int i = 0; i < nn; i += p) {
                fp[i] = invfact[i];
            }
            auto g = atcoder::convolution(f, fp);
            f = vector(g.begin(), g.begin() + nn);
        }
        return f[n];
    };
    cout << solve2().val() << "\n";
}

Submission Info

Submission Time
Task G - Balls and Boxes
User wasd314
Language C++ 23 (gcc 12.2)
Score 575
Code Size 1216 Byte
Status AC
Exec Time 158 ms
Memory 18544 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 575 / 575
Status
AC × 4
AC × 32
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 3528 KiB
00_sample_01.txt AC 1 ms 3616 KiB
00_sample_02.txt AC 154 ms 18420 KiB
00_sample_03.txt AC 5 ms 3796 KiB
01_random_00.txt AC 80 ms 13192 KiB
01_random_01.txt AC 155 ms 18440 KiB
01_random_02.txt AC 77 ms 10976 KiB
01_random_03.txt AC 155 ms 18412 KiB
01_random_04.txt AC 80 ms 12436 KiB
01_random_05.txt AC 154 ms 18372 KiB
01_random_06.txt AC 78 ms 11164 KiB
01_random_07.txt AC 155 ms 18456 KiB
01_random_08.txt AC 78 ms 10916 KiB
01_random_09.txt AC 154 ms 18416 KiB
01_random_10.txt AC 78 ms 11528 KiB
01_random_11.txt AC 155 ms 18412 KiB
02_corner_00.txt AC 158 ms 18364 KiB
02_corner_01.txt AC 157 ms 18508 KiB
02_corner_02.txt AC 156 ms 18480 KiB
02_corner_03.txt AC 156 ms 18412 KiB
02_corner_04.txt AC 157 ms 18416 KiB
02_corner_05.txt AC 155 ms 18368 KiB
02_corner_06.txt AC 156 ms 18444 KiB
02_corner_07.txt AC 155 ms 18420 KiB
02_corner_08.txt AC 155 ms 18448 KiB
02_corner_09.txt AC 156 ms 18384 KiB
02_corner_10.txt AC 154 ms 18532 KiB
02_corner_11.txt AC 154 ms 18544 KiB
02_corner_12.txt AC 153 ms 18404 KiB
02_corner_13.txt AC 153 ms 18412 KiB
02_corner_14.txt AC 78 ms 11488 KiB
02_corner_15.txt AC 80 ms 13076 KiB