結果

問題 No.3375 Binary Grid
コンテスト
ユーザー tassei903
提出日時 2025-11-21 22:42:24
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,358 bytes
コンパイル時間 375 ms
コンパイル使用メモリ 82,672 KB
実行使用メモリ 77,880 KB
最終ジャッジ日時 2025-11-21 22:42:27
合計ジャッジ時間 2,630 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 1 WA * 6
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
input = lambda :sys.stdin.readline()[:-1]
ni = lambda :int(input())
na = lambda :list(map(int,input().split()))
yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES")
no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO")
#######################################################################

# m = 7
# for n in range(0, 1 << m):
#     s = []
#     for j in range(m):
#         if n >> j & 1:
#             s.append("O")
#         else:
#             s.append(" ")
#     print("".join(s))

"""
C が R の最上位 bitじゃない R を増やして 最上位bitに移動する

最上位に隣接していればいい
"""
def solve(r, c):
    f = 0
    cnt = 0
    mx = -1
    for i in range(m-1, -1, -1):
        if f == 0 and r >> i & 1:
            f = 1
            mx = i
        elif f == 1 and r >> i & 1 ^ 1:
            f = 2
        if f == 1:
            cnt += 1
        if f == 1 and c == i:
            return r - 1
    
    # print(r, c)
    if r >> (c + 1) & 1:
        if (r + 1) >> (c + 1) & 1:
            return solve(r+1, c+1) + 1
        else:
            return solve(r, c+1) + 1
        
    toR = (1 << (mx + 1)) - (1 << (mx - cnt))
    # print(bin(r))

    return toR - 1 + max(toR - r, mx - cnt - c)

m = 62
for _ in range(ni()):
    r, c = na()
    print(solve(r, c-1))
0