結果

問題 No.3735 Offbeat Permutation Tree
コンテスト
ユーザー hirayuu_yc
提出日時 2026-09-19 15:14:07
言語 PyPy3
(7.3.23 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 123 ms / 2,000 ms
+ 382µs
コード長 1,736 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 378 ms
コンパイル使用メモリ 82,584 KB
実行使用メモリ 102,204 KB
最終ジャッジ日時 2026-09-19 15:14:16
合計ジャッジ時間 6,549 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge5_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 35
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

from random import shuffle

# N偶数は正しくないよ!

N=int(input())
if N<=3:
    print("-1")
    exit()
if N==4:
    print(
"""1 2
3 4
1 5
2 6
4 8
6 7
7 8
7 11
9 10
11 12
9 13
11 15
12 16
13 14
14 15
""")
    exit()
if N%2==0:
    P=list(range(1,N-1))
    P.pop(P.index(N-3))
    p=[]
    while True:
        shuffle(P)
        p=[0]+P+[N-3]
        flg=True
        for i in range(1,N-1):
            if i%2==0:
                if p[i-1]==p[i]+1:
                    flg=False
            else:
                if p[i-1]==p[i]-1:
                    flg=False
        if flg:
            break
    P=[]
    for i in range(N-1):
        rng=range(i*N,(i+1)*N)
        if i%2==1:
            rng=reversed(rng)
        for j in rng:
            P.append(j)
    dnt=set()
    for i in range(1,N-1):
        dnt.add(i*N+p[i])
    for i in range(N*N-N-3):
        if P[i] not in dnt:
            print(P[i]+1,P[i+1]+1)
        else:
            print(P[i+1]+1-N,P[i+1]+1)
    print(N*N-N+1,N*N-N-N+1)
    for i in range(N-2):
        print(N*N-N+1+i,N*N-N+2+i)
    print(N*N,N*N-N)
    print(N*N-N,N*N-N-1)
    print(N*N-N-1,N*N-1)
    exit(0)
P=list(range(1,N-1))
p=[]
while True:
    shuffle(P)
    p=[0]+P+[N-1]
    flg=True
    for i in range(1,N):
        if i%2==0:
            if p[i-1]==p[i]+1:
                flg=False
        else:
            if p[i-1]==p[i]-1:
                flg=False
    if flg:
        break
P=[]
for i in range(N):
    rng=range(i*N,(i+1)*N)
    if i%2==1:
        rng=reversed(rng)
    for j in rng:
        P.append(j)
dnt=set()
for i in range(1,N):
    dnt.add(i*N+p[i])
for i in range(N*N-1):
    if P[i] not in dnt:
        print(P[i]+1,P[i+1]+1)
    else:
        print(P[i+1]+1-N,P[i+1]+1)
0