QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#749352 | #3265. 组合数问题 | propane | 100 ✓ | 35ms | 3744kb | C++20 | 1.3kb | 2024-11-14 23:46:59 | 2024-11-14 23:47:00 |
Judging History
answer
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
using LL = long long;
int n, p, k, r;
const int N = 50;
struct Matrix{
int a[N][N];
Matrix(){
memset(a, 0, sizeof a);
for(int i = 0; i < N; i++){
a[i][i] = 1;
}
}
Matrix operator*(const Matrix &t) const {
Matrix ans;
memset(ans.a, 0, sizeof ans.a);
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
for(int k = 0; k < N; k++){
ans.a[i][j] = (ans.a[i][j] + 1LL * a[i][k] * t.a[k][j]) % p;
}
}
}
return ans;
}
};
Matrix qpow(Matrix a, LL b){
Matrix ans = Matrix();
while(b){
if (b & 1) ans = ans * a;
b >>= 1;
a = a * a;
}
return ans;
}
int main(){
#ifdef LOCAL
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
cin >> n >> p >> k >> r;
Matrix a;
memset(a.a, 0, sizeof a.a);
for(int i = 0; i < k; i++){
a.a[i][i] += 1;
a.a[i][(i + 1) % k] += 1;
}
auto ans = qpow(a, 1LL * n * k);
cout << ans.a[0][r] << '\n';
}
詳細信息
Pretests
Final Tests
Test #1:
score: 5
Accepted
time: 9ms
memory: 3736kb
input:
14 861021533 17 8
output:
109194683
result:
ok single line: '109194683'
Test #2:
score: 5
Accepted
time: 6ms
memory: 3612kb
input:
14 734575201 8 4
output:
136629647
result:
ok single line: '136629647'
Test #3:
score: 5
Accepted
time: 1ms
memory: 3680kb
input:
6 572660339 1 0
output:
64
result:
ok single line: '64'
Test #4:
score: 5
Accepted
time: 8ms
memory: 3616kb
input:
17 141616127 10 5
output:
87241654
result:
ok single line: '87241654'
Test #5:
score: 5
Accepted
time: 7ms
memory: 3616kb
input:
13 889947181 16 12
output:
100910764
result:
ok single line: '100910764'
Test #6:
score: 5
Accepted
time: 6ms
memory: 3700kb
input:
25 752392757 4 3
output:
424857239
result:
ok single line: '424857239'
Test #7:
score: 5
Accepted
time: 34ms
memory: 3696kb
input:
553999928 2 45 26
output:
0
result:
ok single line: '0'
Test #8:
score: 5
Accepted
time: 27ms
memory: 3688kb
input:
843993365 943947738 1 0
output:
470996456
result:
ok single line: '470996456'
Test #9:
score: 5
Accepted
time: 30ms
memory: 3616kb
input:
855636225 749698583 2 0
output:
545006096
result:
ok single line: '545006096'
Test #10:
score: 5
Accepted
time: 27ms
memory: 3744kb
input:
969348092 956297536 2 1
output:
679600512
result:
ok single line: '679600512'
Test #11:
score: 5
Accepted
time: 13ms
memory: 3676kb
input:
650 660260759 45 16
output:
173373801
result:
ok single line: '173373801'
Test #12:
score: 5
Accepted
time: 16ms
memory: 3680kb
input:
598 221558443 41 40
output:
199993457
result:
ok single line: '199993457'
Test #13:
score: 5
Accepted
time: 15ms
memory: 3700kb
input:
863 269455309 42 29
output:
172561433
result:
ok single line: '172561433'
Test #14:
score: 5
Accepted
time: 19ms
memory: 3672kb
input:
28627 269441503 34 24
output:
180377871
result:
ok single line: '180377871'
Test #15:
score: 5
Accepted
time: 17ms
memory: 3744kb
input:
36656 67854541 25 6
output:
2429047
result:
ok single line: '2429047'
Test #16:
score: 5
Accepted
time: 13ms
memory: 3612kb
input:
27459 172755593 27 20
output:
73460042
result:
ok single line: '73460042'
Test #17:
score: 5
Accepted
time: 33ms
memory: 3744kb
input:
743268139 705178739 33 19
output:
311756018
result:
ok single line: '311756018'
Test #18:
score: 5
Accepted
time: 35ms
memory: 3672kb
input:
934248626 620145553 43 16
output:
121876656
result:
ok single line: '121876656'
Test #19:
score: 5
Accepted
time: 34ms
memory: 3688kb
input:
619290070 907487131 38 19
output:
213941765
result:
ok single line: '213941765'
Test #20:
score: 5
Accepted
time: 28ms
memory: 3620kb
input:
507684930 711845893 28 24
output:
419183631
result:
ok single line: '419183631'
Extra Test:
score: 0
Extra Test Passed