CSES - Aalto Competitive Programming 2024 - wk11 - Wed - Results
Submission details
Task:Grid paths
Sender:aalto2024l_006
Submission time:2024-11-20 17:24:58 +0200
Language:C++ (C++17)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.00 sdetails
#3ACCEPTED0.00 sdetails
#4ACCEPTED0.00 sdetails
#5ACCEPTED0.00 sdetails
#6ACCEPTED0.00 sdetails
#7ACCEPTED0.00 sdetails
#8ACCEPTED0.00 sdetails
#9ACCEPTED0.00 sdetails
#10ACCEPTED0.00 sdetails
#11ACCEPTED0.00 sdetails
#12ACCEPTED0.00 sdetails
#13ACCEPTED0.00 sdetails
#14ACCEPTED0.00 sdetails
#15ACCEPTED0.00 sdetails
#16ACCEPTED0.00 sdetails
#17ACCEPTED0.00 sdetails
#18ACCEPTED0.00 sdetails
#19ACCEPTED0.00 sdetails
#20ACCEPTED0.00 sdetails
#21ACCEPTED0.00 sdetails
#22ACCEPTED0.00 sdetails
#23ACCEPTED0.00 sdetails
#24ACCEPTED0.00 sdetails
#25ACCEPTED0.00 sdetails
#26ACCEPTED0.00 sdetails
#27ACCEPTED0.00 sdetails
#28ACCEPTED0.00 sdetails
#29ACCEPTED0.00 sdetails
#30ACCEPTED0.00 sdetails
#31ACCEPTED0.00 sdetails
#32ACCEPTED0.00 sdetails
#33ACCEPTED0.00 sdetails
#34ACCEPTED0.00 sdetails
#35ACCEPTED0.00 sdetails
#36ACCEPTED0.00 sdetails
#37ACCEPTED0.00 sdetails
#38ACCEPTED0.00 sdetails
#39ACCEPTED0.00 sdetails
#40ACCEPTED0.00 sdetails
#41ACCEPTED0.00 sdetails
#42ACCEPTED0.00 sdetails
#43ACCEPTED0.00 sdetails
#44ACCEPTED0.00 sdetails
#45ACCEPTED0.00 sdetails
#46ACCEPTED0.00 sdetails
#47ACCEPTED0.00 sdetails
#48ACCEPTED0.00 sdetails
#49ACCEPTED0.00 sdetails
#50ACCEPTED0.00 sdetails
#51ACCEPTED0.00 sdetails
#52ACCEPTED0.00 sdetails
#53ACCEPTED0.01 sdetails
#54ACCEPTED0.01 sdetails
#55ACCEPTED0.01 sdetails
#56ACCEPTED0.01 sdetails
#57ACCEPTED0.01 sdetails
#58ACCEPTED0.01 sdetails
#59ACCEPTED0.01 sdetails
#60ACCEPTED0.01 sdetails
#61ACCEPTED0.01 sdetails
#62ACCEPTED0.01 sdetails
#63ACCEPTED0.01 sdetails
#64ACCEPTED0.01 sdetails
#65ACCEPTED0.01 sdetails
#66ACCEPTED0.01 sdetails
#67ACCEPTED0.01 sdetails
#68ACCEPTED0.01 sdetails
#69ACCEPTED0.01 sdetails
#70ACCEPTED0.01 sdetails
#71ACCEPTED0.01 sdetails
#72ACCEPTED0.01 sdetails
#73ACCEPTED0.01 sdetails
#74ACCEPTED0.00 sdetails
#75ACCEPTED0.01 sdetails
#76ACCEPTED0.01 sdetails
#77ACCEPTED0.01 sdetails
#78ACCEPTED0.01 sdetails
#79ACCEPTED0.01 sdetails
#80ACCEPTED0.01 sdetails
#81ACCEPTED0.01 sdetails
#82ACCEPTED0.01 sdetails
#83ACCEPTED0.01 sdetails
#84ACCEPTED0.01 sdetails
#85ACCEPTED0.01 sdetails
#86ACCEPTED0.01 sdetails
#87ACCEPTED0.01 sdetails
#88ACCEPTED0.01 sdetails
#89ACCEPTED0.01 sdetails
#90ACCEPTED0.01 sdetails
#91ACCEPTED0.01 sdetails
#92ACCEPTED0.01 sdetails
#93ACCEPTED0.01 sdetails
#94ACCEPTED0.01 sdetails
#95ACCEPTED0.01 sdetails
#96ACCEPTED0.01 sdetails
#97ACCEPTED0.01 sdetails
#98ACCEPTED0.01 sdetails
#99ACCEPTED0.01 sdetails
#100ACCEPTED0.01 sdetails
#101ACCEPTED0.01 sdetails
#102ACCEPTED0.01 sdetails

Code

#include <iostream>
#include <vector>
#define MOD 998244353
typedef long long ll;

using namespace std;
vector<ll> factorial, inv_factorial;


ll mod_pow(ll base, ll exp, ll mod) {
    ll result = 1;
    while (exp > 0) {
        if (exp % 2 == 1)
            result = (result * base) % mod;
        base = (base * base) % mod;
        exp /= 2;
    }
    return result;
}


void precompute_factorials(int n) {
    factorial.resize(n + 1);
    inv_factorial.resize(n + 1);
    factorial[0] = 1;
    for (int i = 1; i <= n; ++i) {
        factorial[i] = factorial[i - 1] * i % MOD;
    }
    inv_factorial[n] = mod_pow(factorial[n], MOD - 2, MOD); 
    for (int i = n - 1; i >= 0; --i) {
        inv_factorial[i] = inv_factorial[i + 1] * (i + 1) % MOD;
    }
}


ll binomial_coefficient(int n, int k) {
    if (k > n || k < 0) return 0;
    return factorial[n] * inv_factorial[k] % MOD * inv_factorial[n - k] % MOD;
}

int main() {
    int X, Y, Z;
    std::cin >> X >> Y >> Z;
    int sum = X + Y + Z;
    precompute_factorials(sum);  


    ll result = binomial_coefficient(sum, X);
    result = result * binomial_coefficient(sum - X, Y) % MOD;
    cout << result << endl;

    return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
1 1 1

correct output
6

user output
6

Test 2

Verdict: ACCEPTED

input
1 2 2

correct output
30

user output
30

Test 3

Verdict: ACCEPTED

input
2 2 2

correct output
90

user output
90

Test 4

Verdict: ACCEPTED

input
1 3 2

correct output
60

user output
60

Test 5

Verdict: ACCEPTED

input
1 0 0

correct output
1

user output
1

Test 6

Verdict: ACCEPTED

input
2 0 3

correct output
10

user output
10

Test 7

Verdict: ACCEPTED

input
4 4 2

correct output
3150

user output
3150

Test 8

Verdict: ACCEPTED

input
1 0 4

correct output
5

user output
5

Test 9

Verdict: ACCEPTED

input
5 5 1

correct output
2772

user output
2772

Test 10

Verdict: ACCEPTED

input
0 1 4

correct output
5

user output
5

Test 11

Verdict: ACCEPTED

input
5 0 5

correct output
252

user output
252

Test 12

Verdict: ACCEPTED

input
0 2 3

correct output
10

user output
10

Test 13

Verdict: ACCEPTED

input
6 6 7

correct output
46558512

user output
46558512

Test 14

Verdict: ACCEPTED

input
4 10 7

correct output
116396280

user output
116396280

Test 15

Verdict: ACCEPTED

input
4 2 0

correct output
15

user output
15

Test 16

Verdict: ACCEPTED

input
6 0 7

correct output
1716

user output
1716

Test 17

Verdict: ACCEPTED

input
10 9 6

correct output
388234152

user output
388234152

Test 18

Verdict: ACCEPTED

input
2 0 9

correct output
55

user output
55

Test 19

Verdict: ACCEPTED

input
9 10 3

correct output
142262120

user output
142262120

Test 20

Verdict: ACCEPTED

input
0 2 8

correct output
45

user output
45

Test 21

Verdict: ACCEPTED

input
9 0 10

correct output
92378

user output
92378

Test 22

Verdict: ACCEPTED

input
0 4 5

correct output
126

user output
126

Test 23

Verdict: ACCEPTED

input
77 30 2

correct output
207933206

user output
207933206

Test 24

Verdict: ACCEPTED

input
18 6 1

correct output
3364900

user output
3364900

Test 25

Verdict: ACCEPTED

input
15 45 74

correct output
53128847

user output
53128847

Test 26

Verdict: ACCEPTED

input
78 61 23

correct output
501316289

user output
501316289

Test 27

Verdict: ACCEPTED

input
51 93 78

correct output
126313894

user output
126313894

Test 28

Verdict: ACCEPTED

input
85 82 18

correct output
531313357

user output
531313357

Test 29

Verdict: ACCEPTED

input
22 32 52

correct output
837184390

user output
837184390

Test 30

Verdict: ACCEPTED

input
29 18 53

correct output
62578813

user output
62578813

Test 31

Verdict: ACCEPTED

input
65 7 51

correct output
422701975

user output
422701975

Test 32

Verdict: ACCEPTED

input
9 43 76

correct output
83791842

user output
83791842

Test 33

Verdict: ACCEPTED

input
588 888 898

correct output
503848334

user output
503848334

Test 34

Verdict: ACCEPTED

input
48 800 289

correct output
155056270

user output
155056270

Test 35

Verdict: ACCEPTED

input
208 702 482

correct output
539442446

user output
539442446

Test 36

Verdict: ACCEPTED

input
517 669 947

correct output
637353246

user output
637353246

Test 37

Verdict: ACCEPTED

input
960 294 700

correct output
342937256

user output
342937256

Test 38

Verdict: ACCEPTED

input
870 696 582

correct output
616260310

user output
616260310

Test 39

Verdict: ACCEPTED

input
308 713 519

correct output
33883838

user output
33883838

Test 40

Verdict: ACCEPTED

input
426 481 815

correct output
556824158

user output
556824158

Test 41

Verdict: ACCEPTED

input
729 170 561

correct output
509492253

user output
509492253

Test 42

Verdict: ACCEPTED

input
864 801 285

correct output
364315381

user output
364315381

Test 43

Verdict: ACCEPTED

input
6442 9170 3807

correct output
786529613

user output
786529613

Test 44

Verdict: ACCEPTED

input
2860 289 9582

correct output
685493194

user output
685493194

Test 45

Verdict: ACCEPTED

input
8589 596 3727

correct output
760680556

user output
760680556

Test 46

Verdict: ACCEPTED

input
2485 6897 4500

correct output
940772711

user output
940772711

Test 47

Verdict: ACCEPTED

input
385 1957 7801

correct output
857634324

user output
857634324

Test 48

Verdict: ACCEPTED

input
4581 4498 3083

correct output
434838551

user output
434838551

Test 49

Verdict: ACCEPTED

input
7285 876 6016

correct output
542143311

user output
542143311

Test 50

Verdict: ACCEPTED

input
9445 1392 4641

correct output
71990254

user output
71990254

Test 51

Verdict: ACCEPTED

input
3848 8971 8597

correct output
894107749

user output
894107749

Test 52

Verdict: ACCEPTED

input
5469 56 7979

correct output
530063189

user output
530063189

Test 53

Verdict: ACCEPTED

input
40769 64401 5536

correct output
835170422

user output
835170422

Test 54

Verdict: ACCEPTED

input
25092 68058 4609

correct output
774058420

user output
774058420

Test 55

Verdict: ACCEPTED

input
37454 79655 95072

correct output
146618336

user output
146618336

Test 56

Verdict: ACCEPTED

input
11505 49686 60907

correct output
460903426

user output
460903426

Test 57

Verdict: ACCEPTED

input
83485 43254 10479

correct output
365702907

user output
365702907

Test 58

Verdict: ACCEPTED

input
98902 30454 54955

correct output
137657373

user output
137657373

Test 59

Verdict: ACCEPTED

input
78384 25805 63484

correct output
364221017

user output
364221017

Test 60

Verdict: ACCEPTED

input
11349 85177 97449

correct output
878820672

user output
878820672

Test 61

Verdict: ACCEPTED

input
1749 42649 89158

correct output
568752540

user output
568752540

Test 62

Verdict: ACCEPTED

input
30096 47374 24706

correct output
829354422

user output
829354422

Test 63

Verdict: ACCEPTED

input
54882 59285 71520

correct output
623675666

user output
623675666

Test 64

Verdict: ACCEPTED

input
41702 99720 72033

correct output
277561895

user output
277561895

Test 65

Verdict: ACCEPTED

input
43600 18508 2592

correct output
412985183

user output
412985183

Test 66

Verdict: ACCEPTED

input
55080 7072 70815

correct output
652841102

user output
652841102

Test 67

Verdict: ACCEPTED

input
96704 90063 54724

correct output
774619311

user output
774619311

Test 68

Verdict: ACCEPTED

input
22199 5518 87074

correct output
696743124

user output
696743124

Test 69

Verdict: ACCEPTED

input
89287 94749 33198

correct output
584345165

user output
584345165

Test 70

Verdict: ACCEPTED

input
7630 22734 77993

correct output
570604316

user output
570604316

Test 71

Verdict: ACCEPTED

input
87344 1111 96855

correct output
17915653

user output
17915653

Test 72

Verdict: ACCEPTED

input
1037 36446 50188

correct output
856454369

user output
856454369

Test 73

Verdict: ACCEPTED

input
77133 29876 2075

correct output
954243600

user output
954243600

Test 74

Verdict: ACCEPTED

input
18027 6830 1947

correct output
317560580

user output
317560580

Test 75

Verdict: ACCEPTED

input
15416 44622 74006

correct output
58145749

user output
58145749

Test 76

Verdict: ACCEPTED

input
77771 60735 23754

correct output
506483665

user output
506483665

Test 77

Verdict: ACCEPTED

input
51395 92190 77317

correct output
162293324

user output
162293324

Test 78

Verdict: ACCEPTED

input
84883 81359 17889

correct output
756622374

user output
756622374

Test 79

Verdict: ACCEPTED

input
22329 32666 52317

correct output
340258046

user output
340258046

Test 80

Verdict: ACCEPTED

input
29466 18178 53059

correct output
198540032

user output
198540032

Test 81

Verdict: ACCEPTED

input
65038 7601 50546

correct output
977669993

user output
977669993

Test 82

Verdict: ACCEPTED

input
9753 43047 76126

correct output
980244494

user output
980244494

Test 83

Verdict: ACCEPTED

input
58814 88742 89772

correct output
967086349

user output
967086349

Test 84

Verdict: ACCEPTED

input
4872 79928 28911

correct output
451336611

user output
451336611

Test 85

Verdict: ACCEPTED

input
20846 70197 48168

correct output
813382933

user output
813382933

Test 86

Verdict: ACCEPTED

input
51730 66910 94697

correct output
68361808

user output
68361808

Test 87

Verdict: ACCEPTED

input
96003 29443 69952

correct output
85060141

user output
85060141

Test 88

Verdict: ACCEPTED

input
87013 69607 58228

correct output
663549762

user output
663549762

Test 89

Verdict: ACCEPTED

input
30793 71312 51939

correct output
819595366

user output
819595366

Test 90

Verdict: ACCEPTED

input
42572 48080 81459

correct output
545882121

user output
545882121

Test 91

Verdict: ACCEPTED

input
72902 17082 56124

correct output
753823906

user output
753823906

Test 92

Verdict: ACCEPTED

input
86377 80054 28491

correct output
760419142

user output
760419142

Test 93

Verdict: ACCEPTED

input
64415 91699 38075

correct output
939685526

user output
939685526

Test 94

Verdict: ACCEPTED

input
28605 2899 95812

correct output
886982112

user output
886982112

Test 95

Verdict: ACCEPTED

input
85890 5965 37271

correct output
830797537

user output
830797537

Test 96

Verdict: ACCEPTED

input
24851 68969 44998

correct output
785235517

user output
785235517

Test 97

Verdict: ACCEPTED

input
3856 19576 78011

correct output
586779888

user output
586779888

Test 98

Verdict: ACCEPTED

input
45806 44980 30835

correct output
61814992

user output
61814992

Test 99

Verdict: ACCEPTED

input
72851 8764 60162

correct output
423877809

user output
423877809

Test 100

Verdict: ACCEPTED

input
94451 13922 46410

correct output
534902695

user output
534902695

Test 101

Verdict: ACCEPTED

input
38477 89702 85972

correct output
149142997

user output
149142997

Test 102

Verdict: ACCEPTED

input
54689 566 79791

correct output
121698401

user output
121698401