QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#321860 | #7746. Go go Baron Bunny! | YeongTree | AC ✓ | 271ms | 27372kb | C++14 | 2.6kb | 2024-02-05 19:00:06 | 2024-02-05 19:00:07 |
Judging History
answer
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <tuple>
#include <queue>
#include <numeric>
#include <set>
#include <map>
#include <random>
#define pii pair<int, int>
#define pll pair<long long, long long>
#define piii pair<int, pii>
#define plll pair<long long, pll>
#define tiii array<int, 3>
#define tiiii array<int, 4>
#define ff first
#define ss second
#define ee ss.ff
#define rr ss.ss
typedef long long ll;
const int INF = 998244353;
using namespace std;
struct mint
{
int x;
mint(void) : x(0) {}
mint(int x) : x(x) {}
mint operator+ (int ot) const { return x + ot >= INF ? x + ot - INF : x + ot; }
mint operator- (int ot) const { return x >= ot ? x - ot : x + INF - ot; }
mint operator- (void) const { return x ? INF - x : 0; }
mint operator* (int ot) const { return 1ll * x * ot % INF; }
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(void) const { return x; }
};
mint F[3030303];
mint R[3030303];
mint mpow(mint a, ll x)
{
mint ret = 1;
while(x)
{
if(x & 1) ret *= a;
a *= a;
x >>= 1;
}
return ret;
}
mint inv(mint a) { return mpow(a, INF - 2); }
mint comb(int n, int r)
{
if(r < 0 || r > n) return 0;
return F[n] * R[r] * R[n - r];
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
ll n, k, t; cin >> n >> k >> t;
F[0] = 1;
for(int i = 1; i < 3030303; ++i) F[i] = F[i - 1] * i;
R[3030302] = inv(F[3030302]);
for(int i = 3030301; i >= 0; --i) R[i] = R[i + 1] * (i + 1);
if(k >= 1e7) return !(cout << 0);
if(n == k * (k + 1) / 2) return !(cout << F[k]);
bool c; ll p;
if(n < k * (k + 1) / 2)
{
p = k - (k * (k + 1) / 2 - n);
if(p <= 0) return !(cout << 0);
c = true;
}
else
{
p = n - k * (k + 1) / 2;
if(p > k) return !(cout << 0);
c = false;
++k;
}
ll g = __gcd(k, t);
ll l = k / g;
if(p % l) return !(cout << 0);
p /= l;
if(g == 1) return !(cout << 0);
if(c)
{
mint ans = 0;
for(int i = 1; i <= g; ++i)
{
ans += comb(p - 1, i - 1) * comb(g - p - 1, i - 2) * mpow((INF + 1) / 2, (i - 1) * l);
ans += comb(p - 1, i - 1) * comb(g - p - 1, i - 1) * mpow((INF + 1) / 2, i * l);
}
cout << ans * F[k];
}
else
{
mint ans = 0;
for(int i = 1; i <= g; ++i)
{
ans += comb(p - 1, i - 1) * comb(g - p - 1, i - 1) * mpow((INF + 1) / 2, i * l - 1);
ans += comb(p - 1, i - 1) * comb(g - p - 1, i) * mpow((INF + 1) / 2, i * l);
}
cout << ans * F[k - 1];
}
}
这程序好像有点Bug,我给组数据试试?
详细
Test #1:
score: 100
Accepted
time: 28ms
memory: 27364kb
input:
2 1 2
output:
1
result:
ok 1 number(s): "1"
Test #2:
score: 0
Accepted
time: 32ms
memory: 27312kb
input:
8 4 2
output:
6
result:
ok 1 number(s): "6"
Test #3:
score: 0
Accepted
time: 24ms
memory: 27368kb
input:
29 7 154
output:
0
result:
ok 1 number(s): "0"
Test #4:
score: 0
Accepted
time: 28ms
memory: 27288kb
input:
50 10 10
output:
77225400
result:
ok 1 number(s): "77225400"
Test #5:
score: 0
Accepted
time: 24ms
memory: 27316kb
input:
50 9 10
output:
11362680
result:
ok 1 number(s): "11362680"
Test #6:
score: 0
Accepted
time: 21ms
memory: 27280kb
input:
2 1 1
output:
0
result:
ok 1 number(s): "0"
Test #7:
score: 0
Accepted
time: 24ms
memory: 27288kb
input:
20 6 15
output:
0
result:
ok 1 number(s): "0"
Test #8:
score: 0
Accepted
time: 25ms
memory: 27364kb
input:
31 7 62
output:
0
result:
ok 1 number(s): "0"
Test #9:
score: 0
Accepted
time: 24ms
memory: 27364kb
input:
1 1 1
output:
1
result:
ok 1 number(s): "1"
Test #10:
score: 0
Accepted
time: 24ms
memory: 27300kb
input:
1 1 1000000000000
output:
1
result:
ok 1 number(s): "1"
Test #11:
score: 0
Accepted
time: 21ms
memory: 27304kb
input:
1000000 1414 999999999292
output:
626239238
result:
ok 1 number(s): "626239238"
Test #12:
score: 0
Accepted
time: 28ms
memory: 27244kb
input:
1000000 1413 999999999292
output:
804023673
result:
ok 1 number(s): "804023673"
Test #13:
score: 0
Accepted
time: 24ms
memory: 27352kb
input:
637704 1129 999999999368
output:
376288586
result:
ok 1 number(s): "376288586"
Test #14:
score: 0
Accepted
time: 21ms
memory: 27300kb
input:
777711 1246 999999999893
output:
315967293
result:
ok 1 number(s): "315967293"
Test #15:
score: 0
Accepted
time: 24ms
memory: 27284kb
input:
738077 1215 999999999405
output:
481429116
result:
ok 1 number(s): "481429116"
Test #16:
score: 0
Accepted
time: 28ms
memory: 27200kb
input:
878084 1324 999999999825
output:
85615210
result:
ok 1 number(s): "85615210"
Test #17:
score: 0
Accepted
time: 28ms
memory: 27348kb
input:
879744 1326 999999998712
output:
826681339
result:
ok 1 number(s): "826681339"
Test #18:
score: 0
Accepted
time: 25ms
memory: 27232kb
input:
519750 1019 999999999120
output:
380025867
result:
ok 1 number(s): "380025867"
Test #19:
score: 0
Accepted
time: 28ms
memory: 27260kb
input:
521410 1021 999999999509
output:
43307492
result:
ok 1 number(s): "43307492"
Test #20:
score: 0
Accepted
time: 28ms
memory: 27364kb
input:
578829 1075 999999999204
output:
847975635
result:
ok 1 number(s): "847975635"
Test #21:
score: 0
Accepted
time: 24ms
memory: 27260kb
input:
580490 1077 3
output:
0
result:
ok 1 number(s): "0"
Test #22:
score: 0
Accepted
time: 28ms
memory: 27228kb
input:
720496 1199 240
output:
0
result:
ok 1 number(s): "0"
Test #23:
score: 0
Accepted
time: 23ms
memory: 27300kb
input:
722157 1202 601
output:
952370308
result:
ok 1 number(s): "952370308"
Test #24:
score: 0
Accepted
time: 24ms
memory: 27284kb
input:
862163 1312 1313
output:
626393445
result:
ok 1 number(s): "626393445"
Test #25:
score: 0
Accepted
time: 25ms
memory: 27304kb
input:
822530 1283 1
output:
0
result:
ok 1 number(s): "0"
Test #26:
score: 0
Accepted
time: 28ms
memory: 27248kb
input:
962536 1386 1
output:
0
result:
ok 1 number(s): "0"
Test #27:
score: 0
Accepted
time: 28ms
memory: 27300kb
input:
1000000 1412 999999999292
output:
0
result:
ok 1 number(s): "0"
Test #28:
score: 0
Accepted
time: 30ms
memory: 27276kb
input:
1000000000 44721 999999975339
output:
510734471
result:
ok 1 number(s): "510734471"
Test #29:
score: 0
Accepted
time: 28ms
memory: 27356kb
input:
1000000000 44720 999999975339
output:
848193647
result:
ok 1 number(s): "848193647"
Test #30:
score: 0
Accepted
time: 33ms
memory: 27368kb
input:
842907373 41059 999999992564
output:
372008876
result:
ok 1 number(s): "372008876"
Test #31:
score: 0
Accepted
time: 29ms
memory: 27300kb
input:
509306715 31915 999999995252
output:
449159217
result:
ok 1 number(s): "449159217"
Test #32:
score: 0
Accepted
time: 28ms
memory: 27308kb
input:
724371023 38062 999999995226
output:
184015087
result:
ok 1 number(s): "184015087"
Test #33:
score: 0
Accepted
time: 27ms
memory: 27228kb
input:
890770366 42207 999999997728
output:
181797941
result:
ok 1 number(s): "181797941"
Test #34:
score: 0
Accepted
time: 33ms
memory: 27224kb
input:
900801961 42445 999999997945
output:
723246071
result:
ok 1 number(s): "723246071"
Test #35:
score: 0
Accepted
time: 32ms
memory: 27276kb
input:
567201303 33680 999999971049
output:
976667605
result:
ok 1 number(s): "976667605"
Test #36:
score: 0
Accepted
time: 33ms
memory: 27372kb
input:
782265611 39554 999999995722
output:
382214761
result:
ok 1 number(s): "382214761"
Test #37:
score: 0
Accepted
time: 28ms
memory: 27216kb
input:
743632241 38564 999999975555
output:
622113251
result:
ok 1 number(s): "622113251"
Test #38:
score: 0
Accepted
time: 24ms
memory: 27288kb
input:
753663836 38824 2
output:
0
result:
ok 1 number(s): "0"
Test #39:
score: 0
Accepted
time: 28ms
memory: 27372kb
input:
920063179 42896 181
output:
0
result:
ok 1 number(s): "0"
Test #40:
score: 0
Accepted
time: 28ms
memory: 27248kb
input:
635127486 35641 29
output:
0
result:
ok 1 number(s): "0"
Test #41:
score: 0
Accepted
time: 28ms
memory: 27288kb
input:
801526829 40037 40038
output:
966008245
result:
ok 1 number(s): "966008245"
Test #42:
score: 0
Accepted
time: 24ms
memory: 27300kb
input:
811558424 40288 4
output:
0
result:
ok 1 number(s): "0"
Test #43:
score: 0
Accepted
time: 28ms
memory: 27312kb
input:
977957767 44225 1134
output:
0
result:
ok 1 number(s): "0"
Test #44:
score: 0
Accepted
time: 24ms
memory: 27224kb
input:
1000000000 44719 999999975339
output:
0
result:
ok 1 number(s): "0"
Test #45:
score: 0
Accepted
time: 271ms
memory: 27288kb
input:
1000000000000 1414214 999999204684
output:
486279705
result:
ok 1 number(s): "486279705"
Test #46:
score: 0
Accepted
time: 256ms
memory: 27296kb
input:
1000000000000 1414213 999999204684
output:
480189439
result:
ok 1 number(s): "480189439"
Test #47:
score: 0
Accepted
time: 24ms
memory: 27284kb
input:
815496560693 811750096047 999999745266
output:
0
result:
ok 1 number(s): "0"
Test #48:
score: 0
Accepted
time: 22ms
memory: 27300kb
input:
582297122576 579821664123 999999766452
output:
0
result:
ok 1 number(s): "0"
Test #49:
score: 0
Accepted
time: 209ms
memory: 27300kb
input:
554379675168 1052976 999999724464
output:
850999094
result:
ok 1 number(s): "850999094"
Test #50:
score: 0
Accepted
time: 183ms
memory: 27308kb
input:
825475204348 1284892 999998814682
output:
718965161
result:
ok 1 number(s): "718965161"
Test #51:
score: 0
Accepted
time: 244ms
memory: 27232kb
input:
801852724236 1266375 999999350625
output:
266617066
result:
ok 1 number(s): "266617066"
Test #52:
score: 0
Accepted
time: 177ms
memory: 27312kb
input:
568653286119 1066445 999998949078
output:
268095321
result:
ok 1 number(s): "268095321"
Test #53:
score: 0
Accepted
time: 204ms
memory: 27312kb
input:
540735838711 1039938 999999181110
output:
955131707
result:
ok 1 number(s): "955131707"
Test #54:
score: 0
Accepted
time: 173ms
memory: 27260kb
input:
807536400595 1270854 999998944705
output:
83358005
result:
ok 1 number(s): "83358005"
Test #55:
score: 0
Accepted
time: 127ms
memory: 27368kb
input:
779618953187 1248694 624347
output:
695027909
result:
ok 1 number(s): "695027909"
Test #56:
score: 0
Accepted
time: 27ms
memory: 27352kb
input:
546419515070 1045388 1
output:
0
result:
ok 1 number(s): "0"
Test #57:
score: 0
Accepted
time: 78ms
memory: 27300kb
input:
527092002255 1026735 342245
output:
168868859
result:
ok 1 number(s): "168868859"
Test #58:
score: 0
Accepted
time: 27ms
memory: 27248kb
input:
793892564138 1260072 1
output:
0
result:
ok 1 number(s): "0"
Test #59:
score: 0
Accepted
time: 24ms
memory: 27304kb
input:
765975116731 1237720 44
output:
0
result:
ok 1 number(s): "0"
Test #60:
score: 0
Accepted
time: 28ms
memory: 27276kb
input:
532775678613 1032254 11865
output:
0
result:
ok 1 number(s): "0"
Test #61:
score: 0
Accepted
time: 28ms
memory: 27248kb
input:
1000000000000 1414212 999999204684
output:
0
result:
ok 1 number(s): "0"
Extra Test:
score: 0
Extra Test Passed