結果
| 問題 |
No.5020 Averaging
|
| コンテスト | |
| ユーザー |
e869120
|
| 提出日時 | 2024-02-18 16:51:31 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,270 bytes |
| コンパイル時間 | 219 ms |
| コンパイル使用メモリ | 81,700 KB |
| 実行使用メモリ | 65,928 KB |
| スコア | 12,719,802 |
| 最終ジャッジ日時 | 2024-02-25 12:30:09 |
| 合計ジャッジ時間 | 5,124 ms |
|
ジャッジサーバーID (参考情報) |
judge11 / judge14 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | RE * 50 |
ソースコード
Target = 5 * (10 ** 99)
Answer = []
def GetNearest(N, A):
minx = 10 ** 100
minid = -1
for i in range(1, N):
avg = (A[0] + A[i]) // 2
if minx > abs(Target - avg):
minx = abs(Target - avg)
minid = i
return minid
# Step 1. 入力
N = int(input())
A = [ 0 ] * N
for i in range(N):
A[i] = int(input())
# Step 2. 一番近いやつと組む
idx1 = GetNearest(N, A)
avg1 = (A[0] + A[idx1]) // 2
A[0] = avg1
A[idx1] = avg1
Answer.append([0, idx1])
next_tgt = 10 ** 100 - avg1
# Step 3. 貪欲法
while len(Answer) < 99:
mincost = 10 ** 100
minop = [-1, -1]
for i in range(1, N):
for j in range(i+1, N):
avg = (A[i] + A[j]) // 2
if mincost > abs(avg - next_tgt) and A[i] != A[j]:
mincost = abs(avg - next_tgt)
minop = [i, j]
if minop == [-1, -1]:
break
avg2 = (A[minop[0]] + A[minop[1]]) // 2
A[minop[0]] = avg2
A[minop[1]] = avg2
Answer.append(minop)
# Step 4. 一番近いやつと組む
idx3 = GetNearest(N, A)
avg3 = (A[0] + A[idx3]) // 2
A[0] = avg3
A[idx3] = avg3
Answer.append([0, idx3])
# Step 5. 答えを出力
print(len(Answer))
for i in Answer:
print(str(i[0] + 1) + " " + str(i[1] + 1))
e869120