結果
| 問題 | 
                            No.1304 あなたは基本が何か知っていますか?私は知っています.
                             | 
                    
| コンテスト | |
| ユーザー | 
                             lam6er
                         | 
                    
| 提出日時 | 2025-04-16 15:52:22 | 
| 言語 | PyPy3  (7.3.15)  | 
                    
| 結果 | 
                             
                                TLE
                                 
                             
                            
                            (最新)
                                AC
                                 
                             
                            (最初)
                            
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 1,649 bytes | 
| コンパイル時間 | 346 ms | 
| コンパイル使用メモリ | 81,808 KB | 
| 実行使用メモリ | 208,992 KB | 
| 最終ジャッジ日時 | 2025-06-22 03:10:50 | 
| 合計ジャッジ時間 | 13,925 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge3 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| 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()
            
            
            
        
            
lam6er