結果
| 問題 | No.1687 What the Heck? | 
| コンテスト | |
| ユーザー |  FromBooska | 
| 提出日時 | 2023-03-15 23:06:43 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                WA
                                 
                             | 
| 実行時間 | - | 
| コード長 | 1,438 bytes | 
| コンパイル時間 | 237 ms | 
| コンパイル使用メモリ | 81,932 KB | 
| 実行使用メモリ | 102,400 KB | 
| 最終ジャッジ日時 | 2024-09-18 08:56:50 | 
| 合計ジャッジ時間 | 2,219 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 2 | 
| other | AC * 8 WA * 10 | 
ソースコード
# 後ろの方が得点が高い
# つまり後ろで勝つのが得策、勝つときは1点差で勝てばいい
# また、後攻の最高値だけに負けてあと全部勝つのも可能
# N=1のとき、0
# N=2のとき、[1, 2]なら0、[2, 1]なら1
# N=3のとき以上は最高値だけ負けるとすればいい
# WA複数出た、ということは相手のマックス値にマックス値を当てて負けない方がいい場合があるということか
# たとえばP=[4, 3, 2, 1, 5]に対してのベストは[1, 4, 3, 2, 5]
# 2通りの答えを作って最高値を選ぶか
# それを発展させれば、その数字だけ負けて、それ以上はdrawとすることができる
# それで全探索、これはやろうとすると二重ループになってしまうのでやめた
N = int(input())
P = list(map(int, input().split()))
if N == 1:
    ans = 0
elif N == 2:
    if P[0] == 1:
        ans = 0
    else:
        ans = 1
else:
    # Nだけ負ける
    second_point1 = 0
    for i in range(N):
        if P[i] == N:
            second_point1 = i+1
            break
    ans1 = N*(N+1)//2 - second_point1*2
    
    # NにNをぶつけ、N-1を負ける
    second_point2 = 0
    for i in range(N):
        if P[i] == N-1:
            second_point2 = i+1
            break
    ans2 = (N-1)*(N)//2 - second_point2*2
    ans = max(ans1, ans2)
    #print('ans1', ans1, 'ans2', ans2)
    
print(ans)
            
            
            
        