QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#312026 | #7746. Go go Baron Bunny! | karuna | AC ✓ | 35ms | 19488kb | C++20 | 2.4kb | 2024-01-23 10:58:44 | 2024-01-23 10:58:44 |
Judging History
answer
#include <bits/stdc++.h>
#define ff first
#define ss second
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int MAXN = 2020202;
const int MOD = 998244353;
struct mint {
int x;
mint(int x) : x(x) {}
mint() : x(0) {}
mint operator+(int ot) const { return x + ot >= MOD ? x + ot - MOD : x + ot; }
mint operator-(int ot) const { return x - ot < 0 ? x - ot + MOD : x - ot; }
mint operator*(int ot) const { return 1ll * x * ot % MOD; }
mint operator+=(int ot) { return *this = *this + ot; }
mint operator-=(int ot) { return *this = *this - ot; }
mint operator*=(int ot) { return *this = *this * ot; }
operator int() const { return x; }
};
mint mpow(mint a, ll x) {
mint r = 1;
while (x) {
if (x & 1) r *= a;
a *= a;
x /= 2;
}
return r;
}
mint fac[MAXN], inv[MAXN];
mint binom(int n, int k) {
if (n == k) return 1;
if (n < k || k < 0) return 0;
return fac[n] * inv[k] * inv[n - k];
}
ll n, k, t;
int main() {
cin.tie(0); ios_base::sync_with_stdio(0);
fac[0] = 1;
for (int i = 1; i < MAXN; i++) fac[i] = fac[i - 1] * i;
inv[MAXN - 1] = mpow(fac[MAXN - 1], MOD - 2);
for (int i = MAXN - 1; i > 0; i--) inv[i - 1] = inv[i] * i;
cin >> n >> k >> t;
if (k > 1e9) return !(cout << 0 << '\n');
if (t == 1) {
if (n != k * (k + 1) / 2) {
return !(cout << 0 << '\n');
}
else {
return !(cout << fac[k] << '\n');
}
}
mint ans = 0;
if (__gcd(t, k) != 1) {
ll T = __gcd(t, k);
ll g = k / T;
if (n > k * (k - 1) / 2 && n <= k * (k + 1) / 2) {
ll a = n - k * (k - 1) / 2;
ll b = k - a;
if (a % g == 0 && b % g == 0) {
a /= g;
b /= g;
mint s = mpow(2, MOD - 1 - g);
mint t = 1;
for (int x = 0; x <= min(a, b); x++) {
ans += binom(a, x) * binom(b - 1, x - 1) * t;
t *= s;
}
}
}
}
if (__gcd(t, k + 1) != 1) {
ll T = __gcd(t, k + 1);
ll g = (k + 1) / T;
if (n >= k * (k + 1) / 2 && n < (k + 1) * (k + 2) / 2) {
ll b = n - k * (k + 1) / 2;
ll a = k + 1 - b;
if (a % g == 0 && b % g == 0) {
a /= g;
b /= g;
mint s = mpow(2, MOD - 1 - g);
mint t = 1;
mint v = mpow(2, MOD - g);
for (int x = 0; x <= min(a, b); x++) {
ans += binom(a - 1, x) * binom(b - 1, x - 1) * t;
ans += v * binom(a - 1, x) * binom(b - 1, x) * t;
t *= s;
}
}
}
}
cout << ans * fac[k] << '\n';
}
这程序好像有点Bug,我给组数据试试?
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 17ms
memory: 19336kb
input:
2 1 2
output:
1
result:
ok 1 number(s): "1"
Test #2:
score: 0
Accepted
time: 13ms
memory: 19432kb
input:
8 4 2
output:
6
result:
ok 1 number(s): "6"
Test #3:
score: 0
Accepted
time: 17ms
memory: 19364kb
input:
29 7 154
output:
0
result:
ok 1 number(s): "0"
Test #4:
score: 0
Accepted
time: 20ms
memory: 19356kb
input:
50 10 10
output:
77225400
result:
ok 1 number(s): "77225400"
Test #5:
score: 0
Accepted
time: 21ms
memory: 19428kb
input:
50 9 10
output:
11362680
result:
ok 1 number(s): "11362680"
Test #6:
score: 0
Accepted
time: 17ms
memory: 19356kb
input:
2 1 1
output:
0
result:
ok 1 number(s): "0"
Test #7:
score: 0
Accepted
time: 20ms
memory: 19476kb
input:
20 6 15
output:
0
result:
ok 1 number(s): "0"
Test #8:
score: 0
Accepted
time: 20ms
memory: 19424kb
input:
31 7 62
output:
0
result:
ok 1 number(s): "0"
Test #9:
score: 0
Accepted
time: 14ms
memory: 19400kb
input:
1 1 1
output:
1
result:
ok 1 number(s): "1"
Test #10:
score: 0
Accepted
time: 20ms
memory: 19416kb
input:
1 1 1000000000000
output:
1
result:
ok 1 number(s): "1"
Test #11:
score: 0
Accepted
time: 16ms
memory: 19344kb
input:
1000000 1414 999999999292
output:
626239238
result:
ok 1 number(s): "626239238"
Test #12:
score: 0
Accepted
time: 21ms
memory: 19356kb
input:
1000000 1413 999999999292
output:
804023673
result:
ok 1 number(s): "804023673"
Test #13:
score: 0
Accepted
time: 16ms
memory: 19476kb
input:
637704 1129 999999999368
output:
376288586
result:
ok 1 number(s): "376288586"
Test #14:
score: 0
Accepted
time: 16ms
memory: 19356kb
input:
777711 1246 999999999893
output:
315967293
result:
ok 1 number(s): "315967293"
Test #15:
score: 0
Accepted
time: 16ms
memory: 19424kb
input:
738077 1215 999999999405
output:
481429116
result:
ok 1 number(s): "481429116"
Test #16:
score: 0
Accepted
time: 16ms
memory: 19352kb
input:
878084 1324 999999999825
output:
85615210
result:
ok 1 number(s): "85615210"
Test #17:
score: 0
Accepted
time: 17ms
memory: 19404kb
input:
879744 1326 999999998712
output:
826681339
result:
ok 1 number(s): "826681339"
Test #18:
score: 0
Accepted
time: 21ms
memory: 19484kb
input:
519750 1019 999999999120
output:
380025867
result:
ok 1 number(s): "380025867"
Test #19:
score: 0
Accepted
time: 14ms
memory: 19352kb
input:
521410 1021 999999999509
output:
43307492
result:
ok 1 number(s): "43307492"
Test #20:
score: 0
Accepted
time: 16ms
memory: 19416kb
input:
578829 1075 999999999204
output:
847975635
result:
ok 1 number(s): "847975635"
Test #21:
score: 0
Accepted
time: 16ms
memory: 19432kb
input:
580490 1077 3
output:
0
result:
ok 1 number(s): "0"
Test #22:
score: 0
Accepted
time: 16ms
memory: 19336kb
input:
720496 1199 240
output:
0
result:
ok 1 number(s): "0"
Test #23:
score: 0
Accepted
time: 16ms
memory: 19424kb
input:
722157 1202 601
output:
952370308
result:
ok 1 number(s): "952370308"
Test #24:
score: 0
Accepted
time: 16ms
memory: 19416kb
input:
862163 1312 1313
output:
626393445
result:
ok 1 number(s): "626393445"
Test #25:
score: 0
Accepted
time: 16ms
memory: 19352kb
input:
822530 1283 1
output:
0
result:
ok 1 number(s): "0"
Test #26:
score: 0
Accepted
time: 17ms
memory: 19396kb
input:
962536 1386 1
output:
0
result:
ok 1 number(s): "0"
Test #27:
score: 0
Accepted
time: 17ms
memory: 19356kb
input:
1000000 1412 999999999292
output:
0
result:
ok 1 number(s): "0"
Test #28:
score: 0
Accepted
time: 21ms
memory: 19436kb
input:
1000000000 44721 999999975339
output:
510734471
result:
ok 1 number(s): "510734471"
Test #29:
score: 0
Accepted
time: 16ms
memory: 19360kb
input:
1000000000 44720 999999975339
output:
848193647
result:
ok 1 number(s): "848193647"
Test #30:
score: 0
Accepted
time: 16ms
memory: 19360kb
input:
842907373 41059 999999992564
output:
372008876
result:
ok 1 number(s): "372008876"
Test #31:
score: 0
Accepted
time: 21ms
memory: 19428kb
input:
509306715 31915 999999995252
output:
449159217
result:
ok 1 number(s): "449159217"
Test #32:
score: 0
Accepted
time: 16ms
memory: 19432kb
input:
724371023 38062 999999995226
output:
184015087
result:
ok 1 number(s): "184015087"
Test #33:
score: 0
Accepted
time: 17ms
memory: 19396kb
input:
890770366 42207 999999997728
output:
181797941
result:
ok 1 number(s): "181797941"
Test #34:
score: 0
Accepted
time: 16ms
memory: 19404kb
input:
900801961 42445 999999997945
output:
723246071
result:
ok 1 number(s): "723246071"
Test #35:
score: 0
Accepted
time: 17ms
memory: 19484kb
input:
567201303 33680 999999971049
output:
976667605
result:
ok 1 number(s): "976667605"
Test #36:
score: 0
Accepted
time: 17ms
memory: 19364kb
input:
782265611 39554 999999995722
output:
382214761
result:
ok 1 number(s): "382214761"
Test #37:
score: 0
Accepted
time: 14ms
memory: 19408kb
input:
743632241 38564 999999975555
output:
622113251
result:
ok 1 number(s): "622113251"
Test #38:
score: 0
Accepted
time: 13ms
memory: 19476kb
input:
753663836 38824 2
output:
0
result:
ok 1 number(s): "0"
Test #39:
score: 0
Accepted
time: 21ms
memory: 19400kb
input:
920063179 42896 181
output:
0
result:
ok 1 number(s): "0"
Test #40:
score: 0
Accepted
time: 17ms
memory: 19356kb
input:
635127486 35641 29
output:
0
result:
ok 1 number(s): "0"
Test #41:
score: 0
Accepted
time: 16ms
memory: 19368kb
input:
801526829 40037 40038
output:
966008245
result:
ok 1 number(s): "966008245"
Test #42:
score: 0
Accepted
time: 16ms
memory: 19432kb
input:
811558424 40288 4
output:
0
result:
ok 1 number(s): "0"
Test #43:
score: 0
Accepted
time: 16ms
memory: 19480kb
input:
977957767 44225 1134
output:
0
result:
ok 1 number(s): "0"
Test #44:
score: 0
Accepted
time: 16ms
memory: 19424kb
input:
1000000000 44719 999999975339
output:
0
result:
ok 1 number(s): "0"
Test #45:
score: 0
Accepted
time: 19ms
memory: 19380kb
input:
1000000000000 1414214 999999204684
output:
486279705
result:
ok 1 number(s): "486279705"
Test #46:
score: 0
Accepted
time: 25ms
memory: 19476kb
input:
1000000000000 1414213 999999204684
output:
480189439
result:
ok 1 number(s): "480189439"
Test #47:
score: 0
Accepted
time: 17ms
memory: 19428kb
input:
815496560693 811750096047 999999745266
output:
0
result:
ok 1 number(s): "0"
Test #48:
score: 0
Accepted
time: 16ms
memory: 19476kb
input:
582297122576 579821664123 999999766452
output:
0
result:
ok 1 number(s): "0"
Test #49:
score: 0
Accepted
time: 14ms
memory: 19356kb
input:
554379675168 1052976 999999724464
output:
850999094
result:
ok 1 number(s): "850999094"
Test #50:
score: 0
Accepted
time: 35ms
memory: 19364kb
input:
825475204348 1284892 999998814682
output:
718965161
result:
ok 1 number(s): "718965161"
Test #51:
score: 0
Accepted
time: 27ms
memory: 19480kb
input:
801852724236 1266375 999999350625
output:
266617066
result:
ok 1 number(s): "266617066"
Test #52:
score: 0
Accepted
time: 29ms
memory: 19420kb
input:
568653286119 1066445 999998949078
output:
268095321
result:
ok 1 number(s): "268095321"
Test #53:
score: 0
Accepted
time: 20ms
memory: 19412kb
input:
540735838711 1039938 999999181110
output:
955131707
result:
ok 1 number(s): "955131707"
Test #54:
score: 0
Accepted
time: 35ms
memory: 19484kb
input:
807536400595 1270854 999998944705
output:
83358005
result:
ok 1 number(s): "83358005"
Test #55:
score: 0
Accepted
time: 16ms
memory: 19416kb
input:
779618953187 1248694 624347
output:
695027909
result:
ok 1 number(s): "695027909"
Test #56:
score: 0
Accepted
time: 16ms
memory: 19428kb
input:
546419515070 1045388 1
output:
0
result:
ok 1 number(s): "0"
Test #57:
score: 0
Accepted
time: 22ms
memory: 19420kb
input:
527092002255 1026735 342245
output:
168868859
result:
ok 1 number(s): "168868859"
Test #58:
score: 0
Accepted
time: 17ms
memory: 19360kb
input:
793892564138 1260072 1
output:
0
result:
ok 1 number(s): "0"
Test #59:
score: 0
Accepted
time: 17ms
memory: 19420kb
input:
765975116731 1237720 44
output:
0
result:
ok 1 number(s): "0"
Test #60:
score: 0
Accepted
time: 17ms
memory: 19488kb
input:
532775678613 1032254 11865
output:
0
result:
ok 1 number(s): "0"
Test #61:
score: 0
Accepted
time: 17ms
memory: 19412kb
input:
1000000000000 1414212 999999204684
output:
0
result:
ok 1 number(s): "0"
Extra Test:
score: 0
Extra Test Passed