QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#321860#7746. Go go Baron Bunny!YeongTreeAC ✓271ms27372kbC++142.6kb2024-02-05 19:00:062024-02-05 19:00:07

Judging History

This is the latest submission verdict.

  • [2024-02-05 19:00:07]
  • Judged
  • Verdict: AC
  • Time: 271ms
  • Memory: 27372kb
  • [2024-02-05 19:00:06]
  • Submitted

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