1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PythonでABC102のA~C問題を解く

Posted at

はじめに

前回から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よりは簡単だと思ったので、解きたかった。

参考にした記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?