結果
| 問題 | No.1765 While Shining | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2022-01-30 17:48:36 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 93 ms / 2,000 ms | 
| コード長 | 1,072 bytes | 
| コンパイル時間 | 276 ms | 
| コンパイル使用メモリ | 82,048 KB | 
| 実行使用メモリ | 102,144 KB | 
| 最終ジャッジ日時 | 2024-06-11 08:20:16 | 
| 合計ジャッジ時間 | 3,274 ms | 
| ジャッジサーバーID (参考情報) | judge4 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 22 | 
ソースコード
n = int(input())
a = list(map(int, input().split()))
def calc(n: int, v: int) -> int:
    '溜まった分を計算する'
    if v == 0:
        if n % 2 == 0:
            return n // 2 * (n // 2 + 1)
        elif n % 2 == 1:
            return (n + 1) // 2 * ((n + 1) // 2 + 1) - (n + 1) // 2
    elif v == 1:
        if n % 2 == 0:
            return n // 2 * (n // 2 + 1) - n // 2
        elif n % 2 == 1:
            return (n + 1) // 2 * ((n + 1) // 2 + 1) - (n + 1) // 2 - (n + 1) // 2
ans, cnt, now = 0, 0, -1 # 答え・溜まってる数・今いた場所
for i in range(n):
    if now == -1:
        if a[i] == 1:
            now = 1
            cnt = 1
    else:
        if now == 0 and a[i] == 1:
                now = 1
                cnt += 1
        elif now == 1 and a[i] == 0:
                now = 0
                cnt += 1
        else:
            ans += calc(cnt, 0)
            if a[i] == 0:
                cnt, now = 0, -1
            elif a[i] == 1:
                cnt, now = 1, 1
    #print(i, a[i], cnt,ans)
ans += calc(cnt, 1)
print(ans)
            
            
            
        