結果
| 問題 | No.822 Bitwise AND | 
| コンテスト | |
| ユーザー |  lam6er | 
| 提出日時 | 2025-04-15 23:08:42 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                WA
                                 
                             | 
| 実行時間 | - | 
| コード長 | 1,821 bytes | 
| コンパイル時間 | 333 ms | 
| コンパイル使用メモリ | 81,640 KB | 
| 実行使用メモリ | 83,020 KB | 
| 最終ジャッジ日時 | 2025-04-15 23:10:54 | 
| 合計ジャッジ時間 | 4,220 ms | 
| ジャッジサーバーID (参考情報) | judge4 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 2 WA * 7 TLE * 1 -- * 7 | 
ソースコード
def main():
    import sys
    N, K = map(int, sys.stdin.readline().split())
    
    if N == 0:
        if K == 0:
            print(1)
        else:
            print("INF")
        return
    
    # Generate free bits (positions where N has 0)
    free_bits = []
    for bit in range(30):  # Check up to 30 bits
        if (N & (1 << bit)) == 0:
            free_bits.append(bit)
    
    # Check for INF condition
    INF = False
    for i in range(len(free_bits)):
        for j in range(i + 1, len(free_bits)):
            p = free_bits[i]
            q = free_bits[j]
            if (1 << q) - (1 << p) <= K:
                INF = True
                break
        if INF:
            break
    if INF:
        print("INF")
        return
    
    # Count valid pairs
    count = 0
    # Generate all possible a's
    len_free = len(free_bits)
    for a_mask in range(0, 1 << len_free):
        a = 0
        for i in range(len_free):
            if a_mask & (1 << i):
                a_bit = free_bits[i]
                a |= (1 << a_bit)
        if (a & N) != 0:
            continue
        
        # Compute remaining bits (free_bits not in a)
        remaining_bits = []
        for bit in free_bits:
            if (a & (1 << bit)) == 0:
                remaining_bits.append(bit)
        len_remaining = len(remaining_bits)
        
        # Generate all possible b's from remaining_bits
        for b_mask in range(0, 1 << len_remaining):
            b = 0
            for i in range(len_remaining):
                if b_mask & (1 << i):
                    b_bit = remaining_bits[i]
                    b |= (1 << b_bit)
            if a > b:
                continue
            if b - a > K:
                continue
            count += 1
    
    print(count)
if __name__ == "__main__":
    main()
            
            
            
        