結果
| 問題 | No.3506 All Distance is Square Number |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-04-18 04:14:21 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,571 bytes |
| 記録 | |
| コンパイル時間 | 332 ms |
| コンパイル使用メモリ | 85,120 KB |
| 実行使用メモリ | 82,560 KB |
| 最終ジャッジ日時 | 2026-04-18 04:14:31 |
| 合計ジャッジ時間 | 6,030 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge1_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 3 WA * 26 |
ソースコード
import sys
def solve():
sys.setrecursionlimit(2000)
input_data = sys.stdin.read().split()
if not input_data:
return
N = int(input_data[0])
if N == 2:
print("1")
print("1 2 1")
print("1\n1")
return
is_sq = [False] * 40001
for i in range(1, 201):
is_sq[i * i] = True
P = [0] * (N + 1)
used = [False] * 201
for i in range(2, N + 1):
P[i] = 2 * i - 3
used[P[i]] = True
E = [0] * (N + 1)
avail_E = [x for x in range(2, 201, 2) if not used[x]]
pref = [0] * (N + 1)
for i in range(2, N + 1):
pref[i] = pref[i-1] + P[i]
def dfs(k):
if k == N + 1:
return True
for e in avail_E:
if used[e]: continue
ok = True
for i in range(2, k):
if is_sq[pref[k] - pref[i]]:
continue
if is_sq[pref[i] + e]:
continue
if i >= 3 and is_sq[E[i] + e]:
continue
if i >= 3 and is_sq[E[i] + pref[k]]:
continue
ok = False
break
if ok:
used[e] = True
E[k] = e
if dfs(k + 1):
return True
used[e] = False
return False
dfs(3)
edges = []
edge_idx = {}
for i in range(2, N + 1):
edges.append((i - 1, i, P[i]))
edge_idx[(i - 1, i)] = len(edges)
edge_idx[(i, i - 1)] = len(edges)
for i in range(3, N + 1):
edges.append((1, i, E[i]))
edge_idx[(1, i)] = len(edges)
edge_idx[(i, 1)] = len(edges)
print(len(edges))
for u, v, c in edges:
print(f"{u} {v} {c}")
for i in range(1, N):
for j in range(i + 1, N + 1):
path = []
if i == 1:
path = [edge_idx[(m - 1, m)] for m in range(2, j + 1)]
else:
if is_sq[pref[j] - pref[i]]:
path = [edge_idx[(m - 1, m)] for m in range(i + 1, j + 1)]
elif is_sq[pref[i] + E[j]]:
path = [edge_idx[(m, m - 1)] for m in range(i, 1, -1)] + [edge_idx[(1, j)]]
elif i >= 3 and is_sq[E[i] + E[j]]:
path = [edge_idx[(i, 1)], edge_idx[(1, j)]]
elif i >= 3 and is_sq[E[i] + pref[j]]:
path = [edge_idx[(i, 1)]] + [edge_idx[(m - 1, m)] for m in range(2, j + 1)]
print(f"{len(path)} {' '.join(map(str, path))}")
solve()