Submission #39047193
Source Code Expand
from collections import defaultdict
N = int(input())
AL = list(map(int, input().split()))
# 全部違う数字の場合のコスト
cost = 0
for m in range(1, N+1):
cost += (N-m+1) * (m // 2)
num_poss = defaultdict(list)
for i, val in enumerate(AL):
num_poss[val].append(i)
def binsearch(vec, key):
ng = -1
ok = len(vec)
while (abs(ok - ng) > 1):
mid = (ok + ng) // 2
# key未満である要素のうち一番左
if vec[mid] < key:
ok = mid
else:
ng = mid
return ok
for val, poss in num_poss.items():
if len(poss) < 2:
continue
poss1 = [v+1 for v in poss]
poss2 = [N-v for v in poss]
cumsum = [poss2[0]]
for i in range(1, len(poss2)):
cumsum.append(cumsum[i-1]+poss2[i])
pl = len(poss)
for i in range(pl-1):
# # poss2[i+1:]のうちposs1[i]より小さいものはその区間の和、小さいものはposs1[i]*区間サイズ
found = binsearch(poss2, poss1[i])
found = max(found, i+1)
if found < len(cumsum):
cost -= (cumsum[-1] - cumsum[found-1])
cost -= poss1[i] * (found - 1 - i)
# for j in range(i+1, pl):
# # i, j ペアを含む部分列の個数だけコストが減る
# cost -= min(poss1[i], poss2[j])
print(cost)
"""
ナイーブにやると
部分列が先頭と末尾N通りずつでN^2こある
それぞれの列について、先頭と末尾から見ていって不一致の個数だけ変更が必要。コストN
トータルN^3で遅すぎ
中心1個決める(数値がある個所とする)
1個の時コスト0
1+2iこの時コストx
両方向に1個ずつ視野を広げて、一致するかどうかみる。
1+2(i+1)個の範囲になる
一致するならコストx、一致しないならコストx+1
xの累積和を求める
中心1個に対して計算量Nになる
中心はN通り程度
N^2コストでまだ駄目
もし全部の数字が違ったら、部分列ごとにその長さ/2程度がコストになる
2つの数字が同じ場合、そのペアを含む全部分列のコストが1減る。部分列の個数は定数時間
3個以上の数字が同じ場合、全ペアに対して全部分列のコストが1減る。N個の場合N^2ペアあるが速度的にどうだろうか
正確に計算。長さN
"""
Submission Info
| Submission Time | |
|---|---|
| Task | E - Make it Palindrome |
| User | bugtori |
| Language | PyPy3 (7.3.0) |
| Score | 500 |
| Code Size | 2448 Byte |
| Status | AC |
| Exec Time | 220 ms |
| Memory | 143852 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 500 / 500 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | sample_01.txt |
| All | sample_01.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt, test_58.txt, test_59.txt, test_60.txt, test_61.txt, test_62.txt, test_63.txt, test_64.txt, test_65.txt, test_66.txt, test_67.txt, test_68.txt, test_69.txt, test_70.txt, test_71.txt, test_72.txt, test_73.txt, test_74.txt, test_75.txt, test_76.txt, test_77.txt, test_78.txt, test_79.txt, test_80.txt, test_81.txt, test_82.txt, test_83.txt, test_84.txt, test_85.txt, test_86.txt, test_87.txt, test_88.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| sample_01.txt | AC | 67 ms | 64908 KiB |
| test_01.txt | AC | 55 ms | 64988 KiB |
| test_02.txt | AC | 53 ms | 65304 KiB |
| test_03.txt | AC | 56 ms | 65104 KiB |
| test_04.txt | AC | 57 ms | 65160 KiB |
| test_05.txt | AC | 54 ms | 65028 KiB |
| test_06.txt | AC | 55 ms | 65096 KiB |
| test_07.txt | AC | 55 ms | 65020 KiB |
| test_08.txt | AC | 55 ms | 65396 KiB |
| test_09.txt | AC | 57 ms | 64988 KiB |
| test_10.txt | AC | 54 ms | 65328 KiB |
| test_11.txt | AC | 54 ms | 65104 KiB |
| test_12.txt | AC | 57 ms | 64968 KiB |
| test_13.txt | AC | 57 ms | 65324 KiB |
| test_14.txt | AC | 55 ms | 65308 KiB |
| test_15.txt | AC | 57 ms | 65144 KiB |
| test_16.txt | AC | 59 ms | 65348 KiB |
| test_17.txt | AC | 57 ms | 65032 KiB |
| test_18.txt | AC | 59 ms | 65332 KiB |
| test_19.txt | AC | 59 ms | 65088 KiB |
| test_20.txt | AC | 61 ms | 65328 KiB |
| test_21.txt | AC | 58 ms | 65148 KiB |
| test_22.txt | AC | 58 ms | 65320 KiB |
| test_23.txt | AC | 56 ms | 64896 KiB |
| test_24.txt | AC | 55 ms | 65016 KiB |
| test_25.txt | AC | 56 ms | 64916 KiB |
| test_26.txt | AC | 50 ms | 65160 KiB |
| test_27.txt | AC | 56 ms | 65352 KiB |
| test_28.txt | AC | 56 ms | 65160 KiB |
| test_29.txt | AC | 57 ms | 65316 KiB |
| test_30.txt | AC | 57 ms | 65164 KiB |
| test_31.txt | AC | 56 ms | 65120 KiB |
| test_32.txt | AC | 60 ms | 65152 KiB |
| test_33.txt | AC | 143 ms | 117816 KiB |
| test_34.txt | AC | 114 ms | 103948 KiB |
| test_35.txt | AC | 103 ms | 100964 KiB |
| test_36.txt | AC | 72 ms | 75412 KiB |
| test_37.txt | AC | 138 ms | 119768 KiB |
| test_38.txt | AC | 70 ms | 75276 KiB |
| test_39.txt | AC | 192 ms | 143852 KiB |
| test_40.txt | AC | 163 ms | 119100 KiB |
| test_41.txt | AC | 92 ms | 78516 KiB |
| test_42.txt | AC | 188 ms | 141856 KiB |
| test_43.txt | AC | 214 ms | 115540 KiB |
| test_44.txt | AC | 220 ms | 115528 KiB |
| test_45.txt | AC | 209 ms | 115380 KiB |
| test_46.txt | AC | 208 ms | 115512 KiB |
| test_47.txt | AC | 160 ms | 95888 KiB |
| test_48.txt | AC | 195 ms | 112552 KiB |
| test_49.txt | AC | 126 ms | 85316 KiB |
| test_50.txt | AC | 117 ms | 82168 KiB |
| test_51.txt | AC | 160 ms | 120280 KiB |
| test_52.txt | AC | 186 ms | 120504 KiB |
| test_53.txt | AC | 158 ms | 103568 KiB |
| test_54.txt | AC | 184 ms | 103632 KiB |
| test_55.txt | AC | 158 ms | 103544 KiB |
| test_56.txt | AC | 174 ms | 103768 KiB |
| test_57.txt | AC | 164 ms | 103656 KiB |
| test_58.txt | AC | 180 ms | 103776 KiB |
| test_59.txt | AC | 158 ms | 103520 KiB |
| test_60.txt | AC | 176 ms | 103540 KiB |
| test_61.txt | AC | 187 ms | 109212 KiB |
| test_62.txt | AC | 194 ms | 109172 KiB |
| test_63.txt | AC | 175 ms | 109232 KiB |
| test_64.txt | AC | 184 ms | 109144 KiB |
| test_65.txt | AC | 191 ms | 108936 KiB |
| test_66.txt | AC | 179 ms | 108912 KiB |
| test_67.txt | AC | 179 ms | 109116 KiB |
| test_68.txt | AC | 177 ms | 108796 KiB |
| test_69.txt | AC | 190 ms | 109080 KiB |
| test_70.txt | AC | 185 ms | 108980 KiB |
| test_71.txt | AC | 183 ms | 108972 KiB |
| test_72.txt | AC | 179 ms | 105420 KiB |
| test_73.txt | AC | 182 ms | 103820 KiB |
| test_74.txt | AC | 177 ms | 103240 KiB |
| test_75.txt | AC | 178 ms | 103680 KiB |
| test_76.txt | AC | 178 ms | 103732 KiB |
| test_77.txt | AC | 182 ms | 103564 KiB |
| test_78.txt | AC | 188 ms | 103812 KiB |
| test_79.txt | AC | 188 ms | 103844 KiB |
| test_80.txt | AC | 178 ms | 103580 KiB |
| test_81.txt | AC | 184 ms | 143316 KiB |
| test_82.txt | AC | 190 ms | 143336 KiB |
| test_83.txt | AC | 191 ms | 143340 KiB |
| test_84.txt | AC | 190 ms | 143304 KiB |
| test_85.txt | AC | 190 ms | 143312 KiB |
| test_86.txt | AC | 190 ms | 143432 KiB |
| test_87.txt | AC | 189 ms | 143476 KiB |
| test_88.txt | AC | 188 ms | 143320 KiB |