QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#312026#7746. Go go Baron Bunny!karunaAC ✓35ms19488kbC++202.4kb2024-01-23 10:58:442024-01-23 10:58:44

Judging History

你现在查看的是最新测评结果

  • [2024-01-23 10:58:44]
  • 评测
  • 测评结果:AC
  • 用时:35ms
  • 内存:19488kb
  • [2024-01-23 10:58:44]
  • 提交

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