結果

問題 No.822 Bitwise AND
ユーザー lam6er
提出日時 2025-04-15 23:06:28
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,821 bytes
コンパイル時間 434 ms
コンパイル使用メモリ 82,064 KB
実行使用メモリ 83,168 KB
最終ジャッジ日時 2025-04-15 23:08:38
合計ジャッジ時間 4,319 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 2 WA * 7 TLE * 1 -- * 7
権限があれば一括ダウンロードができます

ソースコード

diff #

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()
0