結果
問題 |
No.1304 あなたは基本が何か知っていますか?私は知っています.
|
ユーザー |
![]() |
提出日時 | 2025-04-15 22:27:33 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,649 bytes |
コンパイル時間 | 607 ms |
コンパイル使用メモリ | 82,648 KB |
実行使用メモリ | 209,512 KB |
最終ジャッジ日時 | 2025-06-22 03:09:55 |
合計ジャッジ時間 | 8,842 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 53 TLE * 1 MLE * 1 -- * 19 |
ソースコード
MOD = 998244353 def main(): import sys input = sys.stdin.read data = input().split() N = int(data[0]) K = int(data[1]) X = int(data[2]) Y = int(data[3]) A = list(map(int, data[4:4+K])) # Preprocess allowed transitions for each previous element index allowed = [[] for _ in range(K)] for prev_idx in range(K): prev_val = A[prev_idx] for a_idx in range(K): if A[a_idx] != prev_val: allowed[prev_idx].append(a_idx) # Initialize DP: each element as the first element prev_dp = [{} for _ in range(K)] for idx in range(K): x = A[idx] prev_dp[idx][x] = 1 # Iterate for N-1 steps (since first element is already handled) for _ in range(N - 1): curr_dp = [{} for _ in range(K)] for prev_idx in range(K): # For each allowed next element index for a_idx in allowed[prev_idx]: a_val = A[a_idx] # For each XOR value in the previous state for x_prev, cnt in prev_dp[prev_idx].items(): x_new = x_prev ^ a_val if x_new in curr_dp[a_idx]: curr_dp[a_idx][x_new] = (curr_dp[a_idx][x_new] + cnt) % MOD else: curr_dp[a_idx][x_new] = cnt % MOD prev_dp = curr_dp # Sum all valid XOR values in [X, Y] result = 0 for idx in range(K): for x, cnt in prev_dp[idx].items(): if X <= x <= Y: result = (result + cnt) % MOD print(result) if __name__ == "__main__": main()