結果
問題 |
No.1504 ヌメロニム
|
ユーザー |
![]() |
提出日時 | 2025-06-12 14:48:40 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,289 bytes |
コンパイル時間 | 178 ms |
コンパイル使用メモリ | 82,080 KB |
実行使用メモリ | 249,096 KB |
最終ジャッジ日時 | 2025-06-12 14:51:50 |
合計ジャッジ時間 | 5,876 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 23 WA * 1 TLE * 1 -- * 36 |
ソースコード
MOD = 998244353 def main(): import sys input = sys.stdin.read().split() N = int(input[0]) S = input[1] # 预处理i和n的位置 I = [] N_list = [] for idx, c in enumerate(S): if c == 'i': I.append(idx) elif c == 'n': N_list.append(idx) cnt = {} for i_pos in I: for n_pos in N_list: if n_pos <= i_pos: continue m = n_pos - i_pos - 1 if m in cnt: cnt[m] += 1 else: cnt[m] = 1 max_m = max(cnt.keys()) if cnt else 0 max_k = max_m # 预计算组合数C(m, k) mod MOD max_needed = max_m comb = [ [0]*(max_needed+1) for _ in range(max_needed+1) ] for m in range(max_needed+1): comb[m][0] = 1 comb[m][m] = 1 for k in range(1, m): comb[m][k] = (comb[m-1][k-1] + comb[m-1][k]) % MOD X = [0] * (max_k +1) for m in cnt: for k in range(0, m+1): X[k] = (X[k] + cnt[m] * comb[m][k]) % MOD # 取所有可能的k,即0<=k<=N-2 result = 0 for k in range(0, N-1): xk = X[k] if k <= max_k else 0 result ^= xk print(result % MOD) if __name__ == "__main__": main()