結果
| 問題 |
No.1053 ゲーミング棒
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-05-15 22:02:04 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 125 ms / 2,000 ms |
| コード長 | 1,153 bytes |
| コンパイル時間 | 289 ms |
| コンパイル使用メモリ | 12,416 KB |
| 実行使用メモリ | 25,772 KB |
| 最終ジャッジ日時 | 2024-09-19 10:30:34 |
| 合計ジャッジ時間 | 3,999 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 34 |
ソースコード
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
どこで切って入れ替えても、全体がrotateするだけ。
棒の両端に同じ色がある場合のみ救える
"""
import array
from bisect import *
from collections import *
import fractions
import heapq
from itertools import *
import math
import random
import re
import string
import sys
N = int(input())
As = list(map(int, input().split()))
def solve(N, As):
if N == 1:
return 0
if len(set(As)) == 1:
return 0
# 両端に同じ色がある場合、フラグを立てて、片方の端から
# その色を取り除いておく
if As[0] == As[-1]:
cut_is_need = True
while As[-1] == As[0]:
As.pop()
else:
cut_is_need = False
# この時点で同じ色が複数箇所にあればfail
fail = False
seen = set()
for i, a in enumerate(As):
if a not in seen:
seen.add(a)
else:
if a != As[i - 1]:
fail = True
break
if fail:
return -1
if cut_is_need:
return 1
return 0
print(solve(N, As))