結果

問題 No.3601 Queen Dist Sum with One Wall
コンテスト
ユーザー Kude
提出日時 2026-07-24 23:45:24
言語 PyPy3
(7.3.17)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 1,074 ms / 2,000 ms
+ 978µs
コード長 2,469 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 251 ms
コンパイル使用メモリ 95,976 KB
実行使用メモリ 99,872 KB
最終ジャッジ日時 2026-07-24 23:45:44
合計ジャッジ時間 18,352 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 22
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

def solve(h, w, i, j, bi, bj):
    ans = 2 * (h * w - 2)
    if i > bi:
        i = h-1-i
        bi = h-1-bi
    if j > bj:
        j = w-1-j
        bj = w-1-bj
    if i != bi: ans -= w-1
    else: ans -= bj - 1
    if j != bj: ans -= h-1
    else: ans -= bi - 1
    lx = rx = i
    ly = ry = j
    d = min(lx, ly)
    lx -= d
    ly -= d
    if i-j == bi-bj:
        rx = bi-1
        ry = bj-1
    else:
        d = min(h-1-i, w-1-j)
        rx += d
        ry += d
    ans -= rx - lx
    lx = rx = i
    ly = ry = j
    d = min(lx, w-1-ly)
    lx -= d
    ly += d
    assert i+j != bi+bj
    d = min(h-1-rx, ry)
    rx += d
    ry -= d
    ans -= rx-lx
    if j == bj:
        i, j = j, i
        bi, bj = bj, bi
        h, w = w, h
    if i == bi:
        bj = max(bj+1, j + max(i, h-1-i)+1)
        if bj < w:
            ans += w - bj
            jj = j + 2 * max(i, h - 1 - i)
            if jj >= w:
                jj -= (jj - (w - 1) + 1) // 2 * 2
            if bj <= jj:
                ans -= (jj - bj) // 2 + 1
    return ans

for _ in range(int(input())):
    h, w, i, j, bi, bj = map(int, input().split())
    print(solve(h, w, i-1, j-1, bi-1, bj-1))
exit()

from collections import deque
def solve_naive(h,w,i,j,bi,bj):
    d = [[-1] * w for _ in range(h)]
    d[i][j] = 0
    q = deque()
    q.append((i, j))
    while q:
        i, j = q.popleft()
        for dx, dy in (1,0),(1,1),(0,1),(-1,1),(-1,0),(-1,-1),(0,-1),(1,-1):
            x = i+dx
            y = j+dy
            while 0<=x<h and 0<=y<w and (x!=bi or y!=bj):
                # if i == 1 and j == 0 and dx == 0 and dy == 1: print('A', x, y, d[i][j], d[x][y])
                if d[x][y] == -1:
                    d[x][y] = d[i][j]+1
                    q.append((x, y))
                x += dx
                y += dy
    res = sum(sum(di) for di in d) + 1
    # res -= sum(di.count(3) for di in d)
    # for di in d: print(*di)
    return res

M = 8
for h in range(2,M):
    for w in range(2,M):
        for i in range(h):
            for j in range(w):
                for bi in range(h):
                    for bj in range(w):
                        if i == bi and j == bj: continue
                        res = solve(h, w, i, j, bi, bj)
                        res_n = solve_naive(h, w, i, j, bi, bj)
                        if res != res_n:
                            print(h, w, i, j, bi, bj)
                            print(res, res_n)
                            exit()
0