結果
| 問題 |
No.2779 Don't make Pair
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-06-07 23:26:21 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 142 ms / 2,000 ms |
| コード長 | 1,757 bytes |
| コンパイル時間 | 426 ms |
| コンパイル使用メモリ | 82,304 KB |
| 実行使用メモリ | 98,688 KB |
| 最終ジャッジ日時 | 2024-12-26 10:39:46 |
| 合計ジャッジ時間 | 4,759 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 24 |
ソースコード
# 長さNの配列Aが与えられる
# ここで、1以上N-1以下の整数jを選択して
# {A_1, A_2, ..., A_j}と{A_j+1, A_j+2, ..., A_N}の
# 2つの部分列に分割することを考える
# 以下の条件を満足するjを昇順に列挙せよ
# * 分割された部分列について、どちらの部分列にも同じ要素が2つ以上含まれない
import sys
import itertools
import time
from math import radians, sin, cos, tan, sqrt
from collections import deque
def input():
return sys.stdin.readline().replace('\n','')
sys.setrecursionlimit(1000000)
md1 = 998244353
md2 = 10 ** 9 + 7
N = int(input())
A = list(map(int, input().split()))
dct = {}
flag2 = True #同じ要素の個数が2個以下
flag3 = False #同じ要素が存在する
for i in range(0, N):
if A[i] not in dct:
dct[A[i]] = []
dct[A[i]].append(i+1)
if flag3:
if len(dct[A[i]]) > 2:
flag2 = False
break
else:
if len(dct[A[i]]) > 1:
flag3 = True
if flag3:
if not flag2:
print(0)
print('')
else:
keylist = list(dct.keys())
left = 1
right = N
for i in range(0, len(keylist)):
if len(dct[keylist[i]]) == 2:
dct[keylist[i]].sort()
left = max(left, dct[keylist[i]][0])
right = min(right, dct[keylist[i]][1])
if left < right:
ans = []
for i in range(left, right):
ans.append(i)
print(len(ans))
print(' '.join(map(str, ans)))
else:
print(0)
print('')
else:
print(N-1)
ans = []
for i in range(1, N):
ans.append(i)
print(' '.join(map(str, ans)))