Task: | Fibonacci towers |
Sender: | odanobunaga8199 |
Submission time: | 2024-11-18 17:00:44 +0200 |
Language: | C++ (C++20) |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.00 s | details |
#2 | ACCEPTED | 0.00 s | details |
#3 | ACCEPTED | 0.00 s | details |
#4 | ACCEPTED | 0.00 s | details |
#5 | ACCEPTED | 0.00 s | details |
#6 | ACCEPTED | 0.00 s | details |
#7 | ACCEPTED | 0.00 s | details |
#8 | ACCEPTED | 0.00 s | details |
#9 | ACCEPTED | 0.00 s | details |
#10 | ACCEPTED | 0.00 s | details |
#11 | ACCEPTED | 0.00 s | details |
#12 | ACCEPTED | 0.00 s | details |
#13 | ACCEPTED | 0.00 s | details |
#14 | ACCEPTED | 0.00 s | details |
#15 | ACCEPTED | 0.00 s | details |
#16 | ACCEPTED | 0.00 s | details |
#17 | ACCEPTED | 0.00 s | details |
#18 | ACCEPTED | 0.00 s | details |
#19 | ACCEPTED | 0.00 s | details |
#20 | ACCEPTED | 0.00 s | details |
#21 | ACCEPTED | 0.00 s | details |
#22 | ACCEPTED | 0.00 s | details |
#23 | ACCEPTED | 0.00 s | details |
#24 | ACCEPTED | 0.00 s | details |
#25 | ACCEPTED | 0.00 s | details |
#26 | ACCEPTED | 0.00 s | details |
#27 | ACCEPTED | 0.00 s | details |
#28 | ACCEPTED | 0.00 s | details |
#29 | ACCEPTED | 0.00 s | details |
#30 | ACCEPTED | 0.00 s | details |
#31 | ACCEPTED | 0.00 s | details |
#32 | ACCEPTED | 0.00 s | details |
#33 | ACCEPTED | 0.00 s | details |
#34 | ACCEPTED | 0.00 s | details |
#35 | ACCEPTED | 0.00 s | details |
#36 | ACCEPTED | 0.00 s | details |
#37 | ACCEPTED | 0.01 s | details |
#38 | ACCEPTED | 0.00 s | details |
#39 | ACCEPTED | 0.01 s | details |
#40 | ACCEPTED | 0.00 s | details |
#41 | ACCEPTED | 0.00 s | details |
#42 | ACCEPTED | 0.00 s | details |
#43 | ACCEPTED | 0.00 s | details |
#44 | ACCEPTED | 0.00 s | details |
#45 | ACCEPTED | 0.00 s | details |
#46 | ACCEPTED | 0.00 s | details |
#47 | ACCEPTED | 0.00 s | details |
#48 | ACCEPTED | 0.00 s | details |
#49 | ACCEPTED | 0.00 s | details |
#50 | ACCEPTED | 0.00 s | details |
#51 | ACCEPTED | 0.00 s | details |
#52 | ACCEPTED | 0.00 s | details |
#53 | ACCEPTED | 0.00 s | details |
#54 | ACCEPTED | 0.00 s | details |
#55 | ACCEPTED | 0.01 s | details |
#56 | ACCEPTED | 0.01 s | details |
#57 | ACCEPTED | 0.00 s | details |
#58 | ACCEPTED | 0.00 s | details |
#59 | ACCEPTED | 0.01 s | details |
#60 | ACCEPTED | 0.01 s | details |
#61 | ACCEPTED | 0.00 s | details |
#62 | ACCEPTED | 0.01 s | details |
#63 | ACCEPTED | 0.02 s | details |
#64 | ACCEPTED | 0.02 s | details |
#65 | ACCEPTED | 0.01 s | details |
#66 | ACCEPTED | 0.01 s | details |
#67 | ACCEPTED | 0.02 s | details |
#68 | ACCEPTED | 0.01 s | details |
#69 | ACCEPTED | 0.01 s | details |
#70 | ACCEPTED | 0.02 s | details |
#71 | ACCEPTED | 0.07 s | details |
#72 | ACCEPTED | 0.07 s | details |
#73 | ACCEPTED | 0.08 s | details |
#74 | ACCEPTED | 0.06 s | details |
#75 | ACCEPTED | 0.03 s | details |
#76 | ACCEPTED | 0.03 s | details |
#77 | ACCEPTED | 0.02 s | details |
#78 | ACCEPTED | 0.03 s | details |
#79 | ACCEPTED | 0.04 s | details |
#80 | ACCEPTED | 0.08 s | details |
Code
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int MOD = 998244353; /* f0 = 1 base fb = fb-1 + fb-a (b >= a) fb = fb-1 (1 <= b < a) */ vector<vector<ll>> multiply(const vector<vector<ll>> &A, const vector<vector<ll>> &B, int a_size) { vector<vector<ll>> C(a_size, vector<ll>(a_size, 0)); for(int i=0;i<a_size;i++) { for(int k=0;k<a_size;k++) { if(A[i][k]==0) continue; for(int j=0;j<a_size;j++) { C[i][j] = (C[i][j] + A[i][k] * B[k][j]) % MOD; } } } return C; } vector<vector<ll>> matrix_pow(vector<vector<ll>> A, ll power, int a_size) { vector<vector<ll>> result(a_size, vector<ll>(a_size, 0)); for(int i=0;i<a_size;i++) { result[i][i] = 1; } while(power >0){ if(power &1){ result = multiply(result, A, a_size); } A = multiply(A, A, a_size); power >>=1; } return result; } int main(){ ios::sync_with_stdio(false); cin.tie(0); ll a, b; cin >> a >> b; if(b < a){ cout << "1\n"; return 0; } int size = a; vector<vector<ll>> M(size, vector<ll>(size, 0)); M[0][0] =1; M[0][a-1] =1; for(int i=1;i<size;i++) { M[i][i-1] =1; } ll exp = b - (a-1); vector<vector<ll>> M_exp = matrix_pow(M, exp, size); vector<ll> S(size, 1); ll result =0; for(int j=0;j<size;j++) { result = (result + M_exp[0][j] * S[j]) % MOD; } cout << result; }
Test details
Test 1
Verdict: ACCEPTED
input |
---|
2 10 |
correct output |
---|
89 |
user output |
---|
89 |
Test 2
Verdict: ACCEPTED
input |
---|
2 6 |
correct output |
---|
13 |
user output |
---|
13 |
Test 3
Verdict: ACCEPTED
input |
---|
2 8 |
correct output |
---|
34 |
user output |
---|
34 |
Test 4
Verdict: ACCEPTED
input |
---|
2 68 |
correct output |
---|
977351119 |
user output |
---|
977351119 |
Test 5
Verdict: ACCEPTED
input |
---|
2 78 |
correct output |
---|
20929410 |
user output |
---|
20929410 |
Test 6
Verdict: ACCEPTED
input |
---|
2 76 |
correct output |
---|
878806424 |
user output |
---|
878806424 |
Test 7
Verdict: ACCEPTED
input |
---|
2 485 |
correct output |
---|
908660084 |
user output |
---|
908660084 |
Test 8
Verdict: ACCEPTED
input |
---|
2 519 |
correct output |
---|
838514871 |
user output |
---|
838514871 |
Test 9
Verdict: ACCEPTED
input |
---|
2 602 |
correct output |
---|
892152152 |
user output |
---|
892152152 |
Test 10
Verdict: ACCEPTED
input |
---|
2 165714 |
correct output |
---|
921473843 |
user output |
---|
921473843 |
Test 11
Verdict: ACCEPTED
input |
---|
3 6 |
correct output |
---|
6 |
user output |
---|
6 |
Test 12
Verdict: ACCEPTED
input |
---|
3 8 |
correct output |
---|
13 |
user output |
---|
13 |
Test 13
Verdict: ACCEPTED
input |
---|
2 7 |
correct output |
---|
21 |
user output |
---|
21 |
Test 14
Verdict: ACCEPTED
input |
---|
3 78 |
correct output |
---|
198155624 |
user output |
---|
198155624 |
Test 15
Verdict: ACCEPTED
input |
---|
2 76 |
correct output |
---|
878806424 |
user output |
---|
878806424 |
Test 16
Verdict: ACCEPTED
input |
---|
3 49 |
correct output |
---|
83316385 |
user output |
---|
83316385 |
Test 17
Verdict: ACCEPTED
input |
---|
2 519 |
correct output |
---|
838514871 |
user output |
---|
838514871 |
Test 18
Verdict: ACCEPTED
input |
---|
3 602 |
correct output |
---|
575081686 |
user output |
---|
575081686 |
Test 19
Verdict: ACCEPTED
input |
---|
2 166 |
correct output |
---|
833010588 |
user output |
---|
833010588 |
Test 20
Verdict: ACCEPTED
input |
---|
2 187222 |
correct output |
---|
206734446 |
user output |
---|
206734446 |
Test 21
Verdict: ACCEPTED
input |
---|
2 7 |
correct output |
---|
21 |
user output |
---|
21 |
Test 22
Verdict: ACCEPTED
input |
---|
5 8 |
correct output |
---|
5 |
user output |
---|
5 |
Test 23
Verdict: ACCEPTED
input |
---|
2 8 |
correct output |
---|
34 |
user output |
---|
34 |
Test 24
Verdict: ACCEPTED
input |
---|
5 49 |
correct output |
---|
486716 |
user output |
---|
486716 |
Test 25
Verdict: ACCEPTED
input |
---|
2 52 |
correct output |
---|
409340464 |
user output |
---|
409340464 |
Test 26
Verdict: ACCEPTED
input |
---|
5 61 |
correct output |
---|
14215310 |
user output |
---|
14215310 |
Test 27
Verdict: ACCEPTED
input |
---|
2 166 |
correct output |
---|
833010588 |
user output |
---|
833010588 |
Test 28
Verdict: ACCEPTED
input |
---|
2 188 |
correct output |
---|
914862760 |
user output |
---|
914862760 |
Test 29
Verdict: ACCEPTED
input |
---|
5 611 |
correct output |
---|
386811672 |
user output |
---|
386811672 |
Test 30
Verdict: ACCEPTED
input |
---|
4 672099 |
correct output |
---|
5039638 |
user output |
---|
5039638 |
Test 31
Verdict: ACCEPTED
input |
---|
77 10 |
correct output |
---|
1 |
user output |
---|
1 |
Test 32
Verdict: ACCEPTED
input |
---|
76 1 |
correct output |
---|
1 |
user output |
---|
1 |
Test 33
Verdict: ACCEPTED
input |
---|
80 7 |
correct output |
---|
1 |
user output |
---|
1 |
Test 34
Verdict: ACCEPTED
input |
---|
72 56 |
correct output |
---|
1 |
user output |
---|
1 |
Test 35
Verdict: ACCEPTED
input |
---|
57 97 |
correct output |
---|
42 |
user output |
---|
42 |
Test 36
Verdict: ACCEPTED
input |
---|
54 58 |
correct output |
---|
6 |
user output |
---|
6 |
Test 37
Verdict: ACCEPTED
input |
---|
50 639 |
correct output |
---|
373574336 |
user output |
---|
373574336 |
Test 38
Verdict: ACCEPTED
input |
---|
58 195 |
correct output |
---|
5403 |
user output |
---|
5403 |
Test 39
Verdict: ACCEPTED
input |
---|
61 694 |
correct output |
---|
605984493 |
user output |
---|
605984493 |
Test 40
Verdict: ACCEPTED
input |
---|
9 616206422053543989 |
correct output |
---|
952862778 |
user output |
---|
952862778 |
Test 41
Verdict: ACCEPTED
input |
---|
6 169825965437345849 |
correct output |
---|
513277084 |
user output |
---|
513277084 |
Test 42
Verdict: ACCEPTED
input |
---|
5 191867851255868863 |
correct output |
---|
33742481 |
user output |
---|
33742481 |
Test 43
Verdict: ACCEPTED
input |
---|
9 625431978270398522 |
correct output |
---|
737838270 |
user output |
---|
737838270 |
Test 44
Verdict: ACCEPTED
input |
---|
8 688779226095035965 |
correct output |
---|
162344930 |
user output |
---|
162344930 |
Test 45
Verdict: ACCEPTED
input |
---|
10 802140689263714569 |
correct output |
---|
90271065 |
user output |
---|
90271065 |
Test 46
Verdict: ACCEPTED
input |
---|
6 326105735534681902 |
correct output |
---|
815511427 |
user output |
---|
815511427 |
Test 47
Verdict: ACCEPTED
input |
---|
6 714378023239269070 |
correct output |
---|
974264931 |
user output |
---|
974264931 |
Test 48
Verdict: ACCEPTED
input |
---|
8 389060406667759103 |
correct output |
---|
997632165 |
user output |
---|
997632165 |
Test 49
Verdict: ACCEPTED
input |
---|
5 752611790930241374 |
correct output |
---|
663785595 |
user output |
---|
663785595 |
Test 50
Verdict: ACCEPTED
input |
---|
9 616206422053543989 |
correct output |
---|
952862778 |
user output |
---|
952862778 |
Test 51
Verdict: ACCEPTED
input |
---|
9 616206422053543989 |
correct output |
---|
952862778 |
user output |
---|
952862778 |
Test 52
Verdict: ACCEPTED
input |
---|
10 292432805466778024 |
correct output |
---|
54188787 |
user output |
---|
54188787 |
Test 53
Verdict: ACCEPTED
input |
---|
12 877206118126603157 |
correct output |
---|
50978391 |
user output |
---|
50978391 |
Test 54
Verdict: ACCEPTED
input |
---|
15 106209626593822568 |
correct output |
---|
26611817 |
user output |
---|
26611817 |
Test 55
Verdict: ACCEPTED
input |
---|
20 599479100988098599 |
correct output |
---|
119658586 |
user output |
---|
119658586 |
Test 56
Verdict: ACCEPTED
input |
---|
19 751085324932436268 |
correct output |
---|
362164431 |
user output |
---|
362164431 |
Test 57
Verdict: ACCEPTED
input |
---|
13 653792349017119940 |
correct output |
---|
727329363 |
user output |
---|
727329363 |
Test 58
Verdict: ACCEPTED
input |
---|
14 922927469528725341 |
correct output |
---|
702679243 |
user output |
---|
702679243 |
Test 59
Verdict: ACCEPTED
input |
---|
18 278820978471154000 |
correct output |
---|
447470474 |
user output |
---|
447470474 |
Test 60
Verdict: ACCEPTED
input |
---|
19 595145428494262541 |
correct output |
---|
321383191 |
user output |
---|
321383191 |
Test 61
Verdict: ACCEPTED
input |
---|
16 733419934325111819 |
correct output |
---|
603915854 |
user output |
---|
603915854 |
Test 62
Verdict: ACCEPTED
input |
---|
42 977794035917013551 |
correct output |
---|
535001165 |
user output |
---|
535001165 |
Test 63
Verdict: ACCEPTED
input |
---|
46 107297864267805308 |
correct output |
---|
557129508 |
user output |
---|
557129508 |
Test 64
Verdict: ACCEPTED
input |
---|
47 423649320883482177 |
correct output |
---|
894439428 |
user output |
---|
894439428 |
Test 65
Verdict: ACCEPTED
input |
---|
35 923635615021083310 |
correct output |
---|
306200203 |
user output |
---|
306200203 |
Test 66
Verdict: ACCEPTED
input |
---|
27 119042622192684556 |
correct output |
---|
95698341 |
user output |
---|
95698341 |
Test 67
Verdict: ACCEPTED
input |
---|
50 394425873219136058 |
correct output |
---|
461849248 |
user output |
---|
461849248 |
Test 68
Verdict: ACCEPTED
input |
---|
27 702344952743354850 |
correct output |
---|
361328763 |
user output |
---|
361328763 |
Test 69
Verdict: ACCEPTED
input |
---|
34 148052957467783205 |
correct output |
---|
883611228 |
user output |
---|
883611228 |
Test 70
Verdict: ACCEPTED
input |
---|
49 120057477600708020 |
correct output |
---|
411727310 |
user output |
---|
411727310 |
Test 71
Verdict: ACCEPTED
input |
---|
77 985532091144101696 |
correct output |
---|
533259046 |
user output |
---|
533259046 |
Test 72
Verdict: ACCEPTED
input |
---|
76 62568531781086688 |
correct output |
---|
111230040 |
user output |
---|
111230040 |
Test 73
Verdict: ACCEPTED
input |
---|
80 638842883372078079 |
correct output |
---|
843571033 |
user output |
---|
843571033 |
Test 74
Verdict: ACCEPTED
input |
---|
72 568029317340376926 |
correct output |
---|
760917479 |
user output |
---|
760917479 |
Test 75
Verdict: ACCEPTED
input |
---|
57 993363883840818838 |
correct output |
---|
125996687 |
user output |
---|
125996687 |
Test 76
Verdict: ACCEPTED
input |
---|
54 587462523883449402 |
correct output |
---|
707247678 |
user output |
---|
707247678 |
Test 77
Verdict: ACCEPTED
input |
---|
50 654341799647462242 |
correct output |
---|
823275735 |
user output |
---|
823275735 |
Test 78
Verdict: ACCEPTED
input |
---|
58 198843859011456415 |
correct output |
---|
392227014 |
user output |
---|
392227014 |
Test 79
Verdict: ACCEPTED
input |
---|
61 710225245014179861 |
correct output |
---|
352309063 |
user output |
---|
352309063 |
Test 80
Verdict: ACCEPTED
input |
---|
81 435847411137743327 |
correct output |
---|
639314946 |
user output |
---|
639314946 |