Submission #75458735


Source Code Expand

Copy
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]
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
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
AC × 3
AC × 43
TLE × 1
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


2026-05-02 (Sat)
22:50:02 +09:00