はじめに
前回からratedコンテストには出てないので進捗はないです。
今回は解説を読んでCまで解けました。
深夜に書いてるので、日本語間違えてるかもです
###A問題
問題
考えたこと
nは入力値
何を考えずに解いたので、nが偶数の時を考慮していなくてWAがでました。nが偶数のときは必ずnになるので、
n = int(input())
if n % 2 != 0:
print(n*2)
else:
print(n)
です。
###B問題
問題
考えたこと
入力された数列をソートして最大値から最小値を引けばいいので、
n = int(input())
a = list(map(int,input().split()))
a.sort(reverse=True)
print(abs(a[n-1]-a[0]))
abs()は絶対値を返す関数
###C問題
問題
またARCかよ、ふざけんな
考えたこと
各項を最小にするようなbを決定できれば後は計算できるので、bの値を求めようとした。
bの値の範囲が分らなかったので、とりあえず最大値を取って計算させてみた
n = int(input())
a = list(map(int,input().split()))
d = 0
c = []
for b in range(-max(a),max(a)+1):
for i in range(0,len(a)):
d += abs(a[i]-(b+i+1))
c.append(d)
d = 0
print(min(c))
TLEしました。そりゃそう。
計算数を減らすためにbの範囲を絞ろうとしたけどうまくいかなかったので、解説を見ることにしました。
なるほど、中央値を取ればいいのかということで実装
n = int(input())
a = list(map(int,input().split()))
b_l = []
for i in range(0,len(a)):
b_l.append(a[i] - (i+1))
b_l.sort()
b = b_l[n//2]
ans = 0
for i in range(0,len(a)):
ans += abs(a[i] - (i+1+b))
print(ans)
中央値を取るという考えかたが分れば実装はするだけでした。
これは、自分で気付けた問題だったので精進します。
###まとめ
前回のCよりは簡単だと思ったので、解きたかった。