結果
| 問題 | No.3292 World Map Distance | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2025-10-04 16:18:41 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 1,132 ms / 3,000 ms | 
| コード長 | 1,446 bytes | 
| コンパイル時間 | 436 ms | 
| コンパイル使用メモリ | 82,284 KB | 
| 実行使用メモリ | 265,788 KB | 
| 最終ジャッジ日時 | 2025-10-04 16:19:01 | 
| 合計ジャッジ時間 | 18,236 ms | 
| ジャッジサーバーID (参考情報) | judge1 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 34 | 
ソースコード
from collections import defaultdict
N, X, Y = map(int, input().split())
x, y = [-1] * N, [-1] * N
for i in range(N):
    x[i], y[i] = map(int, input().split())
    x[i] -= 1
    y[i] -= 1
def f(N, z, L):
    slopes = defaultdict(int)
    zs = set()
    a = 0
    wa = 0
    for i in range(N):
        if L & 1 :
            top1 = (z[i] + L // 2) % L
            top2 = (z[i] + L // 2 + 1) % L
            zs.add(z[i])
            zs.add(top1)
            zs.add(top2)
            slopes[z[i]] += 2
            slopes[top1] -= 1
            slopes[top2] -= 1
            if z[i] < L // 2:
                a -= 1
                wa += z[i]
            elif z[i] == L // 2:
                wa += L // 2
            else:
                a += 1
                wa += L - z[i]
        else:
            top = (z[i] + L // 2) % L
            zs.add(z[i])
            zs.add(top)
            slopes[z[i]] += 2
            slopes[top] -= 2
            if z[i] < L // 2:
                a -= 1
                wa += z[i]
            else:
                a += 1
                wa += L - z[i]
        # print("i, wa", i, wa)
    zs = list(zs)
    zs.sort()
    prv = 0
    ans = wa
    for pos in zs:
        add = slopes[pos]
        # print(pos, add, ans, wa)
        wa += (pos - prv) * a
        ans = max(ans, wa)
        prv = pos
        a += add
    return ans
print(f(N, x, X) + f(N, y, Y))
# print(f(N, x, X))
# print(f(N, y, Y))
            
            
            
        