QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#288298 | #7746. Go go Baron Bunny! | Max_s_xaM | AC ✓ | 138ms | 52552kb | C++14 | 3.9kb | 2023-12-22 14:27:56 | 2023-12-22 14:27:56 |
Judging History
answer
#include <iostream>
typedef long long ll;
typedef double lf;
// #define DEBUG 1
struct IO
{
#define MAXSIZE (1 << 20)
#define isdigit(x) (x >= '0' && x <= '9')
char buf[MAXSIZE], *p1, *p2;
char pbuf[MAXSIZE], *pp;
#if DEBUG
#else
IO() : p1(buf), p2(buf), pp(pbuf) {}
~IO() {fwrite(pbuf, 1, pp - pbuf, stdout);}
#endif
#define gc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, MAXSIZE, stdin), p1 == p2) ? ' ' : *p1++)
#define blank(x) (x == ' ' || x == '\n' || x == '\r' || x == '\t')
template <typename T>
void Read(T &x)
{
#if DEBUG
std::cin >> x;
#else
bool sign = 0; char ch = gc(); x = 0;
for (; !isdigit(ch); ch = gc())
if (ch == '-') sign = 1;
for (; isdigit(ch); ch = gc()) x = x * 10 + (ch ^ 48);
if (sign) x = -x;
#endif
}
void Read(char *s)
{
#if DEBUG
std::cin >> s;
#else
char ch = gc();
for (; blank(ch); ch = gc());
for (; !blank(ch); ch = gc()) *s++ = ch;
*s = 0;
#endif
}
void Read(char &c) {for (c = gc(); blank(c); c = gc());}
void Push(const char &c)
{
#if DEBUG
putchar(c);
#else
if (pp - pbuf == MAXSIZE) fwrite(pbuf, 1, MAXSIZE, stdout), pp = pbuf;
*pp++ = c;
#endif
}
template <typename T>
void Write(T x)
{
if (x < 0) x = -x, Push('-');
static T sta[35];
int top = 0;
do sta[top++] = x % 10, x /= 10; while (x);
while (top) Push(sta[--top] ^ 48);
}
template <typename T>
void Write(T x, char lst) {Write(x), Push(lst);}
} IO;
#define Read(x) IO.Read(x)
#define Write(x, y) IO.Write(x, y)
#define Put(x) IO.Push(x)
using namespace std;
const int MAXN = 2e6 + 10, mod = 998244353;
ll N, k, T, ans;
int n, m;
ll fac[MAXN], inv[MAXN], pw[MAXN];
inline ll C(int x, int y) {return (x < y ? 0 : fac[x] * inv[x - y] % mod * inv[y] % mod);}
inline ll GCD(ll x, ll y) {return !y ? x : GCD(y, x % y);}
inline ll Qpow(ll x, int y)
{
ll res = 1;
while (y)
{
if (y & 1) res = res * x % mod;
x = x * x % mod, y >>= 1;
}
return res;
}
inline void Solve(int t)
{
m = (n + 1) / t;
if (N % m) return;
int x = N / m; ll res = 0;
for (int y = 0; y <= x; y++)
{
if (x + y > t) continue;
if (!x) {res = (res + fac[k]) % mod; continue;}
// cout << t << " " << m << " " << x << " " << y << "\n";
if (k == n + 1)
{
if (!y && x != t) continue;
if (!y) res = (res + fac[k]) % mod;
else res = (res + fac[k] * Qpow(pw[m * y], mod - 2) % mod * C(x, y) % mod * C(t - x - 1, y - 1)) % mod;
}
else
{
res = (res + fac[k] * Qpow(pw[m * y], mod - 2) % mod * C(x - 1, y - 1) % mod * C(t - x - 1, y)) % mod;
res = (res + fac[k] * Qpow(pw[m * y + m - 1], mod - 2) % mod * C(x - 1, y) % mod * C(t - x - 1, y)) % mod;
// cout << C(x - 1, y) << " " << C(t - x - 1, y) << "\n";
}
// cout << res << "\n";
}
ans = (ans + res) % mod;
}
int main()
{
// freopen("A.in", "r", stdin);
// freopen("A.out", "w", stdout);
#if DEBUG
#else
// ios::sync_with_stdio(0), cin.tie(0);
#endif
pw[0] = fac[0] = fac[1] = inv[0] = inv[1] = 1, pw[1] = 2;
for (int i = 2; i < MAXN; i++) pw[i] = pw[i - 1] * 2 % mod, fac[i] = fac[i - 1] * i % mod, inv[i] = (mod - mod / i) * inv[mod % i] % mod;
for (int i = 2; i < MAXN; i++) inv[i] = inv[i - 1] * inv[i] % mod;
Read(N), Read(k), Read(T);
ll sum = 0;
while (sum + n + 1 <= N) sum += ++n;
N -= sum;
if (k != n && k != n + 1) return cout << "0\n", 0;
T = GCD(n + 1, T);
// cout << n << " " << N << " " << T << "\n";
Solve(T);
Write(ans, '\n');
return 0;
}
这程序好像有点Bug,我给组数据试试?
详细
Test #1:
score: 100
Accepted
time: 26ms
memory: 51284kb
input:
2 1 2
output:
1
result:
ok 1 number(s): "1"
Test #2:
score: 0
Accepted
time: 22ms
memory: 51172kb
input:
8 4 2
output:
6
result:
ok 1 number(s): "6"
Test #3:
score: 0
Accepted
time: 32ms
memory: 52092kb
input:
29 7 154
output:
0
result:
ok 1 number(s): "0"
Test #4:
score: 0
Accepted
time: 36ms
memory: 51616kb
input:
50 10 10
output:
77225400
result:
ok 1 number(s): "77225400"
Test #5:
score: 0
Accepted
time: 31ms
memory: 52340kb
input:
50 9 10
output:
11362680
result:
ok 1 number(s): "11362680"
Test #6:
score: 0
Accepted
time: 19ms
memory: 51456kb
input:
2 1 1
output:
0
result:
ok 1 number(s): "0"
Test #7:
score: 0
Accepted
time: 14ms
memory: 50684kb
input:
20 6 15
output:
0
result:
ok 1 number(s): "0"
Test #8:
score: 0
Accepted
time: 20ms
memory: 50780kb
input:
31 7 62
output:
0
result:
ok 1 number(s): "0"
Test #9:
score: 0
Accepted
time: 19ms
memory: 51128kb
input:
1 1 1
output:
1
result:
ok 1 number(s): "1"
Test #10:
score: 0
Accepted
time: 26ms
memory: 52292kb
input:
1 1 1000000000000
output:
1
result:
ok 1 number(s): "1"
Test #11:
score: 0
Accepted
time: 20ms
memory: 52308kb
input:
1000000 1414 999999999292
output:
626239238
result:
ok 1 number(s): "626239238"
Test #12:
score: 0
Accepted
time: 23ms
memory: 51876kb
input:
1000000 1413 999999999292
output:
804023673
result:
ok 1 number(s): "804023673"
Test #13:
score: 0
Accepted
time: 23ms
memory: 52156kb
input:
637704 1129 999999999368
output:
376288586
result:
ok 1 number(s): "376288586"
Test #14:
score: 0
Accepted
time: 31ms
memory: 50912kb
input:
777711 1246 999999999893
output:
315967293
result:
ok 1 number(s): "315967293"
Test #15:
score: 0
Accepted
time: 23ms
memory: 51032kb
input:
738077 1215 999999999405
output:
481429116
result:
ok 1 number(s): "481429116"
Test #16:
score: 0
Accepted
time: 19ms
memory: 51216kb
input:
878084 1324 999999999825
output:
85615210
result:
ok 1 number(s): "85615210"
Test #17:
score: 0
Accepted
time: 19ms
memory: 51976kb
input:
879744 1326 999999998712
output:
826681339
result:
ok 1 number(s): "826681339"
Test #18:
score: 0
Accepted
time: 35ms
memory: 50748kb
input:
519750 1019 999999999120
output:
380025867
result:
ok 1 number(s): "380025867"
Test #19:
score: 0
Accepted
time: 28ms
memory: 52464kb
input:
521410 1021 999999999509
output:
43307492
result:
ok 1 number(s): "43307492"
Test #20:
score: 0
Accepted
time: 33ms
memory: 51568kb
input:
578829 1075 999999999204
output:
847975635
result:
ok 1 number(s): "847975635"
Test #21:
score: 0
Accepted
time: 23ms
memory: 51788kb
input:
580490 1077 3
output:
0
result:
ok 1 number(s): "0"
Test #22:
score: 0
Accepted
time: 32ms
memory: 50848kb
input:
720496 1199 240
output:
0
result:
ok 1 number(s): "0"
Test #23:
score: 0
Accepted
time: 27ms
memory: 51960kb
input:
722157 1202 601
output:
952370308
result:
ok 1 number(s): "952370308"
Test #24:
score: 0
Accepted
time: 23ms
memory: 51392kb
input:
862163 1312 1313
output:
626393445
result:
ok 1 number(s): "626393445"
Test #25:
score: 0
Accepted
time: 26ms
memory: 52100kb
input:
822530 1283 1
output:
0
result:
ok 1 number(s): "0"
Test #26:
score: 0
Accepted
time: 25ms
memory: 51752kb
input:
962536 1386 1
output:
0
result:
ok 1 number(s): "0"
Test #27:
score: 0
Accepted
time: 28ms
memory: 52276kb
input:
1000000 1412 999999999292
output:
0
result:
ok 1 number(s): "0"
Test #28:
score: 0
Accepted
time: 28ms
memory: 51760kb
input:
1000000000 44721 999999975339
output:
510734471
result:
ok 1 number(s): "510734471"
Test #29:
score: 0
Accepted
time: 20ms
memory: 52432kb
input:
1000000000 44720 999999975339
output:
848193647
result:
ok 1 number(s): "848193647"
Test #30:
score: 0
Accepted
time: 29ms
memory: 52196kb
input:
842907373 41059 999999992564
output:
372008876
result:
ok 1 number(s): "372008876"
Test #31:
score: 0
Accepted
time: 25ms
memory: 52552kb
input:
509306715 31915 999999995252
output:
449159217
result:
ok 1 number(s): "449159217"
Test #32:
score: 0
Accepted
time: 20ms
memory: 50548kb
input:
724371023 38062 999999995226
output:
184015087
result:
ok 1 number(s): "184015087"
Test #33:
score: 0
Accepted
time: 24ms
memory: 51248kb
input:
890770366 42207 999999997728
output:
181797941
result:
ok 1 number(s): "181797941"
Test #34:
score: 0
Accepted
time: 24ms
memory: 52212kb
input:
900801961 42445 999999997945
output:
723246071
result:
ok 1 number(s): "723246071"
Test #35:
score: 0
Accepted
time: 34ms
memory: 51072kb
input:
567201303 33680 999999971049
output:
976667605
result:
ok 1 number(s): "976667605"
Test #36:
score: 0
Accepted
time: 33ms
memory: 51608kb
input:
782265611 39554 999999995722
output:
382214761
result:
ok 1 number(s): "382214761"
Test #37:
score: 0
Accepted
time: 31ms
memory: 50720kb
input:
743632241 38564 999999975555
output:
622113251
result:
ok 1 number(s): "622113251"
Test #38:
score: 0
Accepted
time: 22ms
memory: 52056kb
input:
753663836 38824 2
output:
0
result:
ok 1 number(s): "0"
Test #39:
score: 0
Accepted
time: 24ms
memory: 51060kb
input:
920063179 42896 181
output:
0
result:
ok 1 number(s): "0"
Test #40:
score: 0
Accepted
time: 29ms
memory: 51156kb
input:
635127486 35641 29
output:
0
result:
ok 1 number(s): "0"
Test #41:
score: 0
Accepted
time: 23ms
memory: 51952kb
input:
801526829 40037 40038
output:
966008245
result:
ok 1 number(s): "966008245"
Test #42:
score: 0
Accepted
time: 33ms
memory: 50596kb
input:
811558424 40288 4
output:
0
result:
ok 1 number(s): "0"
Test #43:
score: 0
Accepted
time: 28ms
memory: 52344kb
input:
977957767 44225 1134
output:
0
result:
ok 1 number(s): "0"
Test #44:
score: 0
Accepted
time: 30ms
memory: 51108kb
input:
1000000000 44719 999999975339
output:
0
result:
ok 1 number(s): "0"
Test #45:
score: 0
Accepted
time: 42ms
memory: 51552kb
input:
1000000000000 1414214 999999204684
output:
486279705
result:
ok 1 number(s): "486279705"
Test #46:
score: 0
Accepted
time: 53ms
memory: 52092kb
input:
1000000000000 1414213 999999204684
output:
480189439
result:
ok 1 number(s): "480189439"
Test #47:
score: 0
Accepted
time: 34ms
memory: 52100kb
input:
815496560693 811750096047 999999745266
output:
0
result:
ok 1 number(s): "0"
Test #48:
score: 0
Accepted
time: 23ms
memory: 50912kb
input:
582297122576 579821664123 999999766452
output:
0
result:
ok 1 number(s): "0"
Test #49:
score: 0
Accepted
time: 35ms
memory: 50876kb
input:
554379675168 1052976 999999724464
output:
850999094
result:
ok 1 number(s): "850999094"
Test #50:
score: 0
Accepted
time: 138ms
memory: 52268kb
input:
825475204348 1284892 999998814682
output:
718965161
result:
ok 1 number(s): "718965161"
Test #51:
score: 0
Accepted
time: 84ms
memory: 52344kb
input:
801852724236 1266375 999999350625
output:
266617066
result:
ok 1 number(s): "266617066"
Test #52:
score: 0
Accepted
time: 90ms
memory: 50960kb
input:
568653286119 1066445 999998949078
output:
268095321
result:
ok 1 number(s): "268095321"
Test #53:
score: 0
Accepted
time: 54ms
memory: 52520kb
input:
540735838711 1039938 999999181110
output:
955131707
result:
ok 1 number(s): "955131707"
Test #54:
score: 0
Accepted
time: 130ms
memory: 51128kb
input:
807536400595 1270854 999998944705
output:
83358005
result:
ok 1 number(s): "83358005"
Test #55:
score: 0
Accepted
time: 31ms
memory: 51284kb
input:
779618953187 1248694 624347
output:
695027909
result:
ok 1 number(s): "695027909"
Test #56:
score: 0
Accepted
time: 19ms
memory: 50856kb
input:
546419515070 1045388 1
output:
0
result:
ok 1 number(s): "0"
Test #57:
score: 0
Accepted
time: 35ms
memory: 51976kb
input:
527092002255 1026735 342245
output:
168868859
result:
ok 1 number(s): "168868859"
Test #58:
score: 0
Accepted
time: 23ms
memory: 52452kb
input:
793892564138 1260072 1
output:
0
result:
ok 1 number(s): "0"
Test #59:
score: 0
Accepted
time: 33ms
memory: 50828kb
input:
765975116731 1237720 44
output:
0
result:
ok 1 number(s): "0"
Test #60:
score: 0
Accepted
time: 27ms
memory: 50472kb
input:
532775678613 1032254 11865
output:
0
result:
ok 1 number(s): "0"
Test #61:
score: 0
Accepted
time: 25ms
memory: 51448kb
input:
1000000000000 1414212 999999204684
output:
0
result:
ok 1 number(s): "0"
Extra Test:
score: 0
Extra Test Passed