Submission #75458735
Source Code Expand
Copy
import sysdef main():input_data = sys.stdin.read().split()if not input_data:returnN = int(input_data[0])S = input_data[1]MOD = 998244353MAX = N + 5fact = [1] * MAXinv = [1] * MAXpow2 = [1] * MAXfor i in range(1, MAX):fact[i] = (fact[i - 1] * i) % MODpow2[i] = (pow2[i - 1] * 2) % MODinv[MAX - 1] = pow(fact[MAX - 1], MOD - 2, MOD)for i in range(MAX - 2, -1, -1):inv[i] = (inv[i + 1] * (i + 1)) % MODL_counts = {}total_dot = 0for part in S.split('x'):l = len(part)if l > 0:L_counts[l] = L_counts.get(l, 0) + 1total_dot += lmax_L = max(L_counts.keys()) if L_counts else 0ans_list = []f_prev = 1for k in range(1, N + 1):if k >= max_L:f_curr = pow2[total_dot]
import sys
def main():
input_data = sys.stdin.read().split()
if not input_data:
return
N = int(input_data[0])
S = input_data[1]
MOD = 998244353
MAX = N + 5
fact = [1] * MAX
inv = [1] * MAX
pow2 = [1] * MAX
for i in range(1, MAX):
fact[i] = (fact[i - 1] * i) % MOD
pow2[i] = (pow2[i - 1] * 2) % MOD
inv[MAX - 1] = pow(fact[MAX - 1], MOD - 2, MOD)
for i in range(MAX - 2, -1, -1):
inv[i] = (inv[i + 1] * (i + 1)) % MOD
L_counts = {}
total_dot = 0
for part in S.split('x'):
l = len(part)
if l > 0:
L_counts[l] = L_counts.get(l, 0) + 1
total_dot += l
max_L = max(L_counts.keys()) if L_counts else 0
ans_list = []
f_prev = 1
for k in range(1, N + 1):
if k >= max_L:
f_curr = pow2[total_dot]
else:
f_curr = 1
for L, c in L_counts.items():
if L <= k:
ways = pow2[L]
else:
res1 = 0
limit1 = L // (k + 2)
for i in range(limit1 + 1):
term = fact[L - i * (k + 1)] * inv[i] % MOD * inv[L - i * (k + 2)] % MOD * pow2[L - i * (k + 2)] % MOD
if i & 1:
res1 = (res1 - term) % MOD
else:
res1 = (res1 + term) % MOD
L2 = L - k - 1
res2 = 0
if L2 >= 0:
limit2 = L2 // (k + 2)
for i in range(limit2 + 1):
term = fact[L2 - i * (k + 1)] * inv[i] % MOD * inv[L2 - i * (k + 2)] % MOD * pow2[L2 - i * (k + 2)] % MOD
if i & 1:
res2 = (res2 - term) % MOD
else:
res2 = (res2 + term) % MOD
ways = (res1 - res2) % MOD
if c == 1:
f_curr = (f_curr * ways) % MOD
else:
f_curr = (f_curr * pow(ways, c, MOD)) % MOD
ans = (f_curr - f_prev) % MOD
ans_list.append(str((ans + MOD) % MOD))
f_prev = f_curr
sys.stdout.write('\n'.join(ans_list) + '\n')
if __name__ == '__main__':
main()
Submission Info
| Submission Time | |
|---|---|
| Task | G - Count Holidays |
| User | th0629 |
| Language | Python (CPython 3.13.7) |
| Score | 0 |
| Code Size | 2527 Byte |
| Status | TLE |
| Exec Time | > 2000 ms |
| Memory | 51392 KiB |
Judge Result
| Set Name | Sample | All | ||||||
|---|---|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 0 / 600 | ||||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt |
| All | 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.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, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 02_max_01.txt, 02_max_02.txt, 02_max_03.txt, 02_max_04.txt, 02_max_05.txt, 02_max_06.txt, 02_max_07.txt, 02_max_08.txt, 02_max_09.txt, 02_max_10.txt, 02_max_11.txt, 02_max_12.txt, 02_max_13.txt, 02_max_14.txt, 02_max_15.txt, 03_corner_01.txt, 03_corner_02.txt, 03_corner_03.txt, 03_corner_04.txt, 04_hand_01.txt, 04_hand_02.txt, 04_hand_03.txt, 04_hand_04.txt, 04_hand_05.txt, 04_hand_06.txt, 04_hand_07.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00_sample_01.txt | AC | 10 ms | 9324 KiB |
| 00_sample_02.txt | AC | 11 ms | 9436 KiB |
| 00_sample_03.txt | AC | 11 ms | 9452 KiB |
| 01_random_01.txt | AC | 36 ms | 19836 KiB |
| 01_random_02.txt | AC | 89 ms | 42876 KiB |
| 01_random_03.txt | AC | 27 ms | 15660 KiB |
| 01_random_04.txt | AC | 52 ms | 23040 KiB |
| 01_random_05.txt | AC | 127 ms | 41432 KiB |
| 01_random_06.txt | AC | 155 ms | 31868 KiB |
| 01_random_07.txt | AC | 249 ms | 28940 KiB |
| 01_random_08.txt | AC | 231 ms | 21884 KiB |
| 01_random_09.txt | AC | 618 ms | 39608 KiB |
| 01_random_10.txt | AC | 594 ms | 35180 KiB |
| 01_random_11.txt | AC | 658 ms | 36264 KiB |
| 01_random_12.txt | AC | 577 ms | 31532 KiB |
| 01_random_13.txt | AC | 251 ms | 18316 KiB |
| 01_random_14.txt | AC | 1333 ms | 46196 KiB |
| 01_random_15.txt | AC | 278 ms | 18568 KiB |
| 02_max_01.txt | AC | 1629 ms | 48556 KiB |
| 02_max_02.txt | AC | 1634 ms | 48248 KiB |
| 02_max_03.txt | AC | 1362 ms | 47288 KiB |
| 02_max_04.txt | AC | 1087 ms | 46032 KiB |
| 02_max_05.txt | AC | 1119 ms | 46500 KiB |
| 02_max_06.txt | AC | 918 ms | 45572 KiB |
| 02_max_07.txt | AC | 840 ms | 45260 KiB |
| 02_max_08.txt | AC | 808 ms | 45360 KiB |
| 02_max_09.txt | AC | 717 ms | 45496 KiB |
| 02_max_10.txt | AC | 465 ms | 45528 KiB |
| 02_max_11.txt | AC | 281 ms | 45168 KiB |
| 02_max_12.txt | AC | 169 ms | 45308 KiB |
| 02_max_13.txt | AC | 119 ms | 45332 KiB |
| 02_max_14.txt | AC | 100 ms | 45180 KiB |
| 02_max_15.txt | AC | 92 ms | 45252 KiB |
| 03_corner_01.txt | AC | 11 ms | 9576 KiB |
| 03_corner_02.txt | AC | 11 ms | 9480 KiB |
| 03_corner_03.txt | TLE | > 2000 ms | 51392 KiB |
| 03_corner_04.txt | AC | 93 ms | 44928 KiB |
| 04_hand_01.txt | AC | 688 ms | 45328 KiB |
| 04_hand_02.txt | AC | 623 ms | 45376 KiB |
| 04_hand_03.txt | AC | 614 ms | 45196 KiB |
| 04_hand_04.txt | AC | 95 ms | 45464 KiB |
| 04_hand_05.txt | AC | 90 ms | 45228 KiB |
| 04_hand_06.txt | AC | 89 ms | 45256 KiB |
| 04_hand_07.txt | AC | 95 ms | 44928 KiB |