QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#562426 | #8184. Different Summands Counting | Afterlife# | AC ✓ | 318ms | 11700kb | C++20 | 2.0kb | 2024-09-13 17:30:23 | 2024-09-13 17:30:24 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
typedef long long ll;
ll n;
int m ;
const int N = 1e6;
const int mod = 998244353;
int qpow(int a,int b) {
int ans = 1;
while(b) {
if(b & 1) ans = 1LL * ans * a %mod;
a = 1LL * a * a %mod; b >>= 1;
}
return ans;
}
int t[N + 5] , rt[N + 5];
int C(int a,int b) {
if(a == -1 && b == -1) return 1;
if(b < 0) return 0;
if(a < 0) return 0;
if(a < b) return 0;
return 1LL * t[a] * rt[b] % mod * rt[a - b] % mod;
}
int g[505];
int inter(vector<int> v , int k) {
int ans=0;
int n=v.size()-1;
for(int i=0;i<=n;++i){
int A=1,B=1;
for(int j=0;j<=n;++j){
if(i==j)continue;
A=1LL*A*(k-j)%mod;
B=1LL*B*(i-j)%mod;
}
A=(A+mod)%mod;
B=(B+mod)%mod;
ans=(ans+1LL*A*qpow(B,mod-2)%mod*v[i])%mod;
}
return ans;
}
int calc(int a,int b,int d,ll r) {
vector<int> v(d + 2) ;
for(int i = 0;i <= d + 1;i++) {
v[i] = 0;
if(i) v[i] = v[i - 1];
v[i] = (v[i] + C(a * i + b , d)) % mod;
}
int ans = inter(v , r % mod) ;
return ans;
}
int main() {
cin >> n >> m;
t[0] = rt[0] = 1;
for(int i = 1;i <= N;i++) t[i] = 1LL * t[i - 1] * i % mod , rt[i] = qpow(t[i] , mod - 2);
int ans = 0;
for(int i = 1;i <= m;i++) {
g[i] = 0;
// for(int k = 1 ; k <= n ; k++) {
// g[i] = (g[i] + C(n - i*k - 1 , m - i - 1)) % mod;
// // printf("true %d %d\n",n-i*k-1 , m - i - 1) ;
// }
if(i == m) {
if(n % m == 0) g[i] = 1;
else g[i] = 0;
}
else {
g[i] = calc(i , (n - 1) % i , m - i - 1 , (n - 1) / i - 1) ;
}
g[i] = 1LL * g[i] * C(m , i) % mod;
// printf("%d %d\n",i,g[i]) ;
if(i & 1) ans= (ans + g[i]) % mod;
else ans = (ans - g[i] + mod) % mod ;
}
cout << ans << '\n';
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 125ms
memory: 11404kb
input:
10 2
output:
17
result:
ok 1 number(s): "17"
Test #2:
score: 0
Accepted
time: 122ms
memory: 11340kb
input:
20 4
output:
3413
result:
ok 1 number(s): "3413"
Test #3:
score: 0
Accepted
time: 122ms
memory: 11640kb
input:
30 7
output:
2405830
result:
ok 1 number(s): "2405830"
Test #4:
score: 0
Accepted
time: 126ms
memory: 11428kb
input:
25 4
output:
7336
result:
ok 1 number(s): "7336"
Test #5:
score: 0
Accepted
time: 314ms
memory: 11700kb
input:
1000000000000000000 500
output:
423462987
result:
ok 1 number(s): "423462987"
Test #6:
score: 0
Accepted
time: 126ms
memory: 11328kb
input:
999999999999691765 1
output:
1
result:
ok 1 number(s): "1"
Test #7:
score: 0
Accepted
time: 126ms
memory: 11648kb
input:
999995937371566570 1
output:
1
result:
ok 1 number(s): "1"
Test #8:
score: 0
Accepted
time: 126ms
memory: 11428kb
input:
959 1
output:
1
result:
ok 1 number(s): "1"
Test #9:
score: 0
Accepted
time: 118ms
memory: 11604kb
input:
738 2
output:
1473
result:
ok 1 number(s): "1473"
Test #10:
score: 0
Accepted
time: 121ms
memory: 11368kb
input:
51940862 2
output:
103881721
result:
ok 1 number(s): "103881721"
Test #11:
score: 0
Accepted
time: 122ms
memory: 11408kb
input:
534 2
output:
1065
result:
ok 1 number(s): "1065"
Test #12:
score: 0
Accepted
time: 114ms
memory: 11608kb
input:
1000000000000000000 3
output:
845235930
result:
ok 1 number(s): "845235930"
Test #13:
score: 0
Accepted
time: 125ms
memory: 11424kb
input:
999999999999999999 3
output:
693511949
result:
ok 1 number(s): "693511949"
Test #14:
score: 0
Accepted
time: 126ms
memory: 11344kb
input:
864 3
output:
1114567
result:
ok 1 number(s): "1114567"
Test #15:
score: 0
Accepted
time: 126ms
memory: 11408kb
input:
591809296303238498 4
output:
293545419
result:
ok 1 number(s): "293545419"
Test #16:
score: 0
Accepted
time: 122ms
memory: 11412kb
input:
4979 5
output:
489533133
result:
ok 1 number(s): "489533133"
Test #17:
score: 0
Accepted
time: 165ms
memory: 11416kb
input:
999996551350045349 5
output:
94086466
result:
ok 1 number(s): "94086466"
Test #18:
score: 0
Accepted
time: 124ms
memory: 11420kb
input:
6016698794637 10
output:
21019269
result:
ok 1 number(s): "21019269"
Test #19:
score: 0
Accepted
time: 127ms
memory: 11340kb
input:
807 10
output:
926457609
result:
ok 1 number(s): "926457609"
Test #20:
score: 0
Accepted
time: 126ms
memory: 11392kb
input:
1000000000000000000 20
output:
942748867
result:
ok 1 number(s): "942748867"
Test #21:
score: 0
Accepted
time: 125ms
memory: 11320kb
input:
999999999999978053 20
output:
856342931
result:
ok 1 number(s): "856342931"
Test #22:
score: 0
Accepted
time: 122ms
memory: 11392kb
input:
997545214682632383 22
output:
611358320
result:
ok 1 number(s): "611358320"
Test #23:
score: 0
Accepted
time: 126ms
memory: 11424kb
input:
999999999999999999 22
output:
675578869
result:
ok 1 number(s): "675578869"
Test #24:
score: 0
Accepted
time: 121ms
memory: 11648kb
input:
419076504441583762 22
output:
48383442
result:
ok 1 number(s): "48383442"
Test #25:
score: 0
Accepted
time: 126ms
memory: 11392kb
input:
318 50
output:
179936804
result:
ok 1 number(s): "179936804"
Test #26:
score: 0
Accepted
time: 122ms
memory: 11364kb
input:
222 50
output:
727197189
result:
ok 1 number(s): "727197189"
Test #27:
score: 0
Accepted
time: 126ms
memory: 11408kb
input:
999999999999999999 50
output:
925729462
result:
ok 1 number(s): "925729462"
Test #28:
score: 0
Accepted
time: 119ms
memory: 11652kb
input:
762200545525776 75
output:
327716882
result:
ok 1 number(s): "327716882"
Test #29:
score: 0
Accepted
time: 123ms
memory: 11368kb
input:
138288 81
output:
445898304
result:
ok 1 number(s): "445898304"
Test #30:
score: 0
Accepted
time: 127ms
memory: 11584kb
input:
659457709 81
output:
452473813
result:
ok 1 number(s): "452473813"
Test #31:
score: 0
Accepted
time: 127ms
memory: 11648kb
input:
999999990717779391 81
output:
794519551
result:
ok 1 number(s): "794519551"
Test #32:
score: 0
Accepted
time: 123ms
memory: 11440kb
input:
436978356910906711 100
output:
137492099
result:
ok 1 number(s): "137492099"
Test #33:
score: 0
Accepted
time: 139ms
memory: 11644kb
input:
999999996592424938 200
output:
731073159
result:
ok 1 number(s): "731073159"
Test #34:
score: 0
Accepted
time: 140ms
memory: 11460kb
input:
999999999999999999 200
output:
509983346
result:
ok 1 number(s): "509983346"
Test #35:
score: 0
Accepted
time: 135ms
memory: 11644kb
input:
1000000000000000000 200
output:
441545728
result:
ok 1 number(s): "441545728"
Test #36:
score: 0
Accepted
time: 159ms
memory: 11480kb
input:
16982382700142252 272
output:
436113233
result:
ok 1 number(s): "436113233"
Test #37:
score: 0
Accepted
time: 170ms
memory: 11700kb
input:
1000000000000000000 300
output:
464643821
result:
ok 1 number(s): "464643821"
Test #38:
score: 0
Accepted
time: 170ms
memory: 11492kb
input:
999999999999999999 300
output:
383551773
result:
ok 1 number(s): "383551773"
Test #39:
score: 0
Accepted
time: 162ms
memory: 11516kb
input:
999995030025107023 300
output:
867118476
result:
ok 1 number(s): "867118476"
Test #40:
score: 0
Accepted
time: 215ms
memory: 11452kb
input:
8163 400
output:
971517282
result:
ok 1 number(s): "971517282"
Test #41:
score: 0
Accepted
time: 226ms
memory: 11512kb
input:
1000000000000000000 400
output:
581335073
result:
ok 1 number(s): "581335073"
Test #42:
score: 0
Accepted
time: 247ms
memory: 11460kb
input:
999999999999999999 426
output:
298358370
result:
ok 1 number(s): "298358370"
Test #43:
score: 0
Accepted
time: 243ms
memory: 11648kb
input:
1420 426
output:
952985679
result:
ok 1 number(s): "952985679"
Test #44:
score: 0
Accepted
time: 263ms
memory: 11492kb
input:
863118 445
output:
237379873
result:
ok 1 number(s): "237379873"
Test #45:
score: 0
Accepted
time: 263ms
memory: 11456kb
input:
3822817 445
output:
818252692
result:
ok 1 number(s): "818252692"
Test #46:
score: 0
Accepted
time: 260ms
memory: 11412kb
input:
999999999999999999 447
output:
774884223
result:
ok 1 number(s): "774884223"
Test #47:
score: 0
Accepted
time: 256ms
memory: 11640kb
input:
148755911871216926 447
output:
355549012
result:
ok 1 number(s): "355549012"
Test #48:
score: 0
Accepted
time: 301ms
memory: 11408kb
input:
1000000000000000000 492
output:
980334224
result:
ok 1 number(s): "980334224"
Test #49:
score: 0
Accepted
time: 301ms
memory: 11456kb
input:
999999999999999348 492
output:
482780786
result:
ok 1 number(s): "482780786"
Test #50:
score: 0
Accepted
time: 309ms
memory: 11404kb
input:
999999884436856972 492
output:
892292610
result:
ok 1 number(s): "892292610"
Test #51:
score: 0
Accepted
time: 310ms
memory: 11668kb
input:
1399 493
output:
984913617
result:
ok 1 number(s): "984913617"
Test #52:
score: 0
Accepted
time: 310ms
memory: 11492kb
input:
999999999999999999 493
output:
177173159
result:
ok 1 number(s): "177173159"
Test #53:
score: 0
Accepted
time: 302ms
memory: 11476kb
input:
5690586664 493
output:
306771535
result:
ok 1 number(s): "306771535"
Test #54:
score: 0
Accepted
time: 315ms
memory: 11380kb
input:
1727132392490 497
output:
4203841
result:
ok 1 number(s): "4203841"
Test #55:
score: 0
Accepted
time: 318ms
memory: 11484kb
input:
1358 498
output:
80348265
result:
ok 1 number(s): "80348265"
Test #56:
score: 0
Accepted
time: 316ms
memory: 11428kb
input:
1000000000000000000 498
output:
166818138
result:
ok 1 number(s): "166818138"
Test #57:
score: 0
Accepted
time: 317ms
memory: 11672kb
input:
999999999999923208 499
output:
710616059
result:
ok 1 number(s): "710616059"
Test #58:
score: 0
Accepted
time: 313ms
memory: 11484kb
input:
999999999999999999 499
output:
951659064
result:
ok 1 number(s): "951659064"
Test #59:
score: 0
Accepted
time: 313ms
memory: 11492kb
input:
1000000000000000000 499
output:
945692946
result:
ok 1 number(s): "945692946"
Test #60:
score: 0
Accepted
time: 318ms
memory: 11648kb
input:
246568444718418 500
output:
378699829
result:
ok 1 number(s): "378699829"
Test #61:
score: 0
Accepted
time: 314ms
memory: 11468kb
input:
1156 500
output:
997092726
result:
ok 1 number(s): "997092726"
Test #62:
score: 0
Accepted
time: 318ms
memory: 11644kb
input:
166067991026698932 500
output:
155266353
result:
ok 1 number(s): "155266353"