Submission #66434399


Source Code Expand

Copy
#include <stdio.h>
#define MOD_BY 998244353
int add(int a, int b) {
return a + b - MOD_BY * (a + b >= MOD_BY);
}
int mul(int a, int b) {
return (int)((long long)a * b % MOD_BY);
}
int pou(int a, int b) {
int r = 1;
while (b > 0) {
if (b & 1) r = mul(r, a);
a = mul(a, a);
b >>= 1;
}
return r;
}
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <stdio.h>

#define MOD_BY 998244353

int add(int a, int b) {
	return a + b - MOD_BY * (a + b >= MOD_BY);
}

int mul(int a, int b) {
	return (int)((long long)a * b % MOD_BY);
}

int pou(int a, int b) {
	int r = 1;
	while (b > 0) {
		if (b & 1) r = mul(r, a);
		a = mul(a, a);
		b >>= 1;
	}
	return r;
}

int inv(int a) {
	return pou(a, MOD_BY - 2);
}

int kaizyo_cache[1123456 * 4];
int kaizyo_cache_max = -1;

int kaizyo(int a) {
	if (a > kaizyo_cache_max) {
		int i;
		if (kaizyo_cache_max < 0) {
			kaizyo_cache[0] = 1;
			kaizyo_cache_max = 0;
		}
		for (i = kaizyo_cache_max + 1; i <= a; i++) {
			kaizyo_cache[i] = mul(kaizyo_cache[i - 1], i);
		}
		kaizyo_cache_max = a;
	}
	return kaizyo_cache[a];
}

/* hoge を a 個、fuga を b 個並べるパターン数を求める */
int kazu(int a, int b) {
	return mul(kaizyo(a + b), inv(mul(kaizyo(a), kaizyo(b))));
}

int main(void) {
	int A, B, C, D;
	int ans = 0;
	int i;
	if (scanf("%d%d%d%d", &A, &B, &C, &D) != 4) return 1;
	for (i = 0; i <= B; i++) {
		ans = add(ans, mul(kazu(A - 1, i), kazu(C, B - i + D)));
	}
	printf("%d\n", ans);
	return 0;
}

/*

                          ラストリンゴ     ファーストブドウ
<----- リンゴゾーン ----->○<---------------------- バナナゾーン ----->
<----- オレンジゾーン -------------------->○<----- ブドウゾーン ----->

1. オレンジ・バナナ・Xを適当に並べる
2. X の前半をリンゴに、後半をブドウにする

→ ダメ (バナナの後にリンゴが来る可能性があるので)
→ 来るパターンを弾けばいい?

-------

リンゴゾーンに入れるオレンジの数を決め打ちする
↓
「リンゴ」「決めた数のオレンジ」を並べる (最後はリンゴで固定)
「バナナ」「X (残りのオレンジとブドウ)」を並べる

*/

Submission Info

Submission Time
Task E - Fruit Lineup
User mikecat
Language C (gcc 12.2.0)
Score 475
Code Size 1929 Byte
Status AC
Exec Time 283 ms
Memory 13436 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 475 / 475
Status
AC × 3
AC × 17
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 02_max_00.txt, 02_max_01.txt, 02_max_02.txt, 02_max_03.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 1700 KiB
00_sample_01.txt AC 1 ms 1620 KiB
00_sample_02.txt AC 15 ms 7532 KiB
01_random_00.txt AC 77 ms 7852 KiB
01_random_01.txt AC 218 ms 9248 KiB
01_random_02.txt AC 156 ms 7356 KiB
01_random_03.txt AC 57 ms 4592 KiB
01_random_04.txt AC 15 ms 5524 KiB
01_random_05.txt AC 243 ms 11184 KiB
01_random_06.txt AC 259 ms 7784 KiB
01_random_07.txt AC 126 ms 5732 KiB
01_random_08.txt AC 219 ms 5692 KiB
01_random_09.txt AC 31 ms 6100 KiB
02_max_00.txt AC 283 ms 13284 KiB
02_max_01.txt AC 283 ms 13436 KiB
02_max_02.txt AC 283 ms 13424 KiB
02_max_03.txt AC 283 ms 13272 KiB


2025-06-04 (Wed)
03:46:04 +09:00