AtCoder ABC180
2020-10-17(土)に行われたAtCoderBeginnerContest180の問題をA問題から順に考察も踏まえてまとめたものとなります.
問題は引用して記載していますが,詳しくはコンテストページの方で確認してください.
コンテストページはこちら
公式解説PDF
A問題 box
問題文
$N$個のボールが入っていた箱から$A$個のボールを取り出し、新たに$B$個のボールを入れました。今、箱にはボールが何個入っていますか?
n, a, b = map(int, input().split())
print(n - a + b)
B問題 Various distances
問題文
$N$次元空間内の点$(x_1,…,x_N)$が与えられます。
原点からこの点までの、マンハッタン距離、ユークリッド距離、チェビシェフ距離をそれぞれ求めてください。 ただし、それぞれの距離は次のように計算されます。
・マンハッタン距離:$|x_1|+…+|x_N|$
・ユークリッド距離:$\sqrt{|x_1|^2+…+|x_N|^2}$
チェビシェフ距離:$max(|x_1|,…,|x_N|)$
n = int(input())
x_list = list(map(int, input().split()))
a = 0
b = 0
c = 0
for x in x_list:
if x < 0:
x *= -1
a += x
b += x * x
if c < x:
c = x
print(a)
print(b**(0.5))
print(c)
C問題 Cream puff
問題文
$N$個のシュークリームがあります。
シュークリームを分割することなく平等に分けることができるような人数としてあり得るものを全て求めてください。
def make_divisors(n):
divisors = []
for i in range(1, int(n**0.5)+1):
if n % i == 0:
divisors.append(i)
if i != n // i:
divisors.append(n//i)
divisors.sort()
return divisors
n = int(input())
for x in make_divisors(n):
print(x)
D問題 Takahashi Unevolved
問題文
いろはちゃんはペットを育てるゲームにはまっています。
いろはちゃんはペットとして高橋君を飼っており、はじめ高橋君の強さは$X$、経験値は$0$です。 これらの値は次の$2$種類の特訓によって増加します。
・カコモンジムに通う:強さが$A$倍になり、経験値は$1$増える。
・AtCoderジムに通う:強さが$B$増え、経験値は$1$増える。
高橋君は強さが$Y$以上になると進化しますが、進化しない方がかわいいといろはちゃんは思っています。
そこで、強さが$Y$以上にならないように高橋君に特訓を課すとき、経験値の最大値を求めてください。
コンテスト中は,繰り返し処理を使わないように,何回カコモンジムに通えるかを,logとか使って計算していました.
(n = int(math.log(b / a / x, a)) + 1みたいな感じ)
解説に書いてあった,何回カコモンジムに通えるかは制約的に$64$回以下,を見てなるほどなと思いました.
コードは解説に載っていたものです.
x,y,a,b=map(int,input().split())
ans=0
while a*x<=x+b and a*x<y:
x*=a
ans+=1
print(ans+(y-1-x)//b)
ここ最近,D問題までは解けても,そこまでのどこかしらの問題で時間使い過ぎて,E問題解ききれていないので,もう少し柔軟に問題が解けるようになりたいと思います.
最後まで読んでいただきありがとうございました.