結果

問題 No.2779 Don't make Pair
ユーザー ArleenArleen
提出日時 2024-06-07 23:26:21
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 118 ms / 2,000 ms
コード長 1,757 bytes
コンパイル時間 278 ms
コンパイル使用メモリ 81,652 KB
実行使用メモリ 99,120 KB
最終ジャッジ日時 2024-06-07 23:26:32
合計ジャッジ時間 3,801 ms
ジャッジサーバーID
(参考情報)
judge1 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 44 ms
53,736 KB
testcase_01 AC 41 ms
53,956 KB
testcase_02 AC 59 ms
53,760 KB
testcase_03 AC 42 ms
53,632 KB
testcase_04 AC 41 ms
53,888 KB
testcase_05 AC 40 ms
53,888 KB
testcase_06 AC 39 ms
54,144 KB
testcase_07 AC 39 ms
54,016 KB
testcase_08 AC 40 ms
53,888 KB
testcase_09 AC 46 ms
62,592 KB
testcase_10 AC 63 ms
78,848 KB
testcase_11 AC 49 ms
65,664 KB
testcase_12 AC 92 ms
94,720 KB
testcase_13 AC 94 ms
94,784 KB
testcase_14 AC 68 ms
81,280 KB
testcase_15 AC 107 ms
98,308 KB
testcase_16 AC 103 ms
95,268 KB
testcase_17 AC 100 ms
95,996 KB
testcase_18 AC 100 ms
93,156 KB
testcase_19 AC 104 ms
98,532 KB
testcase_20 AC 73 ms
80,760 KB
testcase_21 AC 107 ms
96,580 KB
testcase_22 AC 110 ms
96,824 KB
testcase_23 AC 114 ms
99,120 KB
testcase_24 AC 108 ms
97,024 KB
testcase_25 AC 107 ms
96,664 KB
testcase_26 AC 110 ms
96,524 KB
testcase_27 AC 111 ms
96,896 KB
testcase_28 AC 118 ms
96,732 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

# 長さ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)))

0