#目次
1~10
11~20
21~30
31~40
41~50
51~60
61~70
71~80
81~90 ← 今ココ
91~100
#81. ABC100 C - *3 or /2
Difficulty:264
例1 の$\ 5\ $を何度も 3 倍して$\ 15,45 \dots\ $としても、どれも$\ 2\ $でちょうど割り切れないことが分かる。
同じように$\ 2\ $を何度も 3 倍して$\ 6,18 \dots\ $としても、どれも$\ 2\ $で割り切れる回数は 1 回だけである。
このことから、各数字が何回$\ 2\ $で割り切れるか調べる。
n = int(input())
a = list(map(int,input().split()))
ans = 0
for i in range(n):
while a[i] % 2 == 0:
a[i] = a[i] // 2
ans += 1
print(ans)
Difficulty:380
頼まれるアイスティーは$\ N\ $リットルの整数であるため、あらかじめ$\ Q \times 4\ $ 、$\ H \times 2\ $ として$\ 1\ $リットルに揃えておく。
あとは$\ N\ $リットルを注文するのに$\ L\ $のみ注文するべきか、$\ D\ $込みで注文するべきか判断する。
例2 のように丁度注文しないといけない点に注意する。
q,h,s,d = map(int,input().split())
n = int(input())
l = min(q*4,h*2,s)
if n % 2 != 0:
print(min((n//2)*d+l,n*l))
else:
print(min((n//2)*d,n*l))
#83. ABC087 C - Candies
Difficulty:268
全部で$\ N\ $通りの飴の取り方がある。
上側を$\ A\ $、下側を$\ B\ $とし、$\ A_i\ $で$\ B\ $に降りた場合、$\ A_1 \dots A_i\ $の合計と、$\ B_i \dots B_N\ $の合計が入手できる飴の数になる。
n = int(input())
a = list(map(int,input().split()))
b = list(map(int,input().split()))
ans = 0
for i in range(n):
c = sum(a[0:i+1]) + sum(b[i:n])
ans = max(ans,c)
print(ans)
Difficulty:287
$\ A_1\ $の街にいるモンスターは$\ B_1\ $の勇者しか倒せないことから、前から順に倒せるか判断する。
最初にモンスターの合計$\ S\ $を求めておき、勇者$\ B_i\ $が順番に$\ A_i,A_{i+1}\ $のモンスターを倒していく。
倒しきれずに残ったモンスターの合計を$\ S\ $から引けば倒したモンスターの数になる。
n = int(input())
a = list(map(int,input().split()))
b = list(map(int,input().split()))
ans = sum(a)
for i in range(n):
if b[i] > a[i]:
b[i] -= a[i]
a[i] = 0
if b[i] >= a[i+1]:
a[i+1] = 0
else:
a[i+1] -= b[i]
else:
a[i] -= b[i]
print(ans - sum(a))
#85. ABC100 B - Ringo's Favorite Numbers
Difficulty:275
$\ 100^D \times N\ $と計算すれば、プレゼントすべき整数が分かる。
しかし、例えば$\ 0,100\ $の場合、上通りに計算すると$\ 100\ $となるが、 100 で 1 回割りきれてしまうので WA になる。
なので$\ N=100\ $の時だけさらに$ 100^d\ $を足さないといけないことに注意する。
d,n = map(int,input().split())
if n == 100:
print(100 ** d * n + 100 ** d)
else:
print(100 ** d * n)
Difficulty:379
$\ K\ $の数字が分かるまで文字列$\ S\ $を操作すると、$\ 1 \le K \le 10^{18}\ $の制約で TEL になる。
文字列の操作を見ると、最終的に$\ 2\ $の長さは$\ 2^{5 \times 10^{11}}\ $になり、$\ 10^{18}\ $よりも大きい。
一方で$\ 1\ $は何日経っても長さは$\ 1\ $なので、$\ S_K\ $までに$\ 1\ $以外の数字が存在する場合はそれが答えであり、そうでなければ$\ 1\ $が答えになる。
s = list(input())
k = int(input())
for i in range(min(k,len(s))):
if s[i] != '1':
print(s[i])
exit(0)
print(1)
#87. ABC103 C - Modulo Summation
Difficulty:279
$\ (a_1 \times a_2 \times \dots a_N)/N\ $を$\ m\ $としたいが、$\ m \mod a_i\ $が$\ 0\ $になってしまう。
なので$\ m-1 \mod a_i\ $とし、 例3 なら$\ 155848-1\ $でそれぞれの余りが$\ 6,45,10,19,10=90\ $となり、最大値になることが分かる。
しかし、$\ 2 \le a_i \le 10^5\ $の数字を全てかけるのは避けたい。
先ほどの余りを見ると、全て$\ a_i-1\ $になっているため、答えは$\ (a_1+a_2+ \dots a_N)-N\ $になる。
n = int(input())
a = list(map(int,input().split()))
print(sum(a) - n)
#88. ABC091 B - Two Colors Card Game
Difficulty:282
まず、このカードに含まれる文字列が何種類あるかを調べる。
$\ S\ $と$\ T\ $を結合し、重複を消せば文字列が何種類あるか分かる、重複を消したリストを$\ L\ $とする。
先ほど調べた$\ L\ $を順番に発言して、それぞれいくらもらえるか調べる。
例3 のように、最低は 0 円になることに注意する。
n = int(input())
s = list(input() for i in range(n))
m = int(input())
t = list(input() for i in range(m))
a = s + t
a = list(set(a))
ans = 0
for i in range(len(a)):
plus = s.count(a[i])
minus = t.count(a[i])
ans = max(ans,plus - minus)
print(ans)
Difficulty:288
プレゼントする整数は$\ X^1,X^2,X^3 \dots\ $となるので、$\ Y\ $以下を満たす$\ X^i\ $の$\ i\ $が数列の長さになる。
x,y = map(int,input().split())
i = 1
while x *(2 ** i) <= y:
i += 1
print(i)
Difficulty:291
$\ N\ $回目のトレーニングを終えるとパワーは$\ N!\ $になるが、 例3 の入力例$\ 10^5!\ $を求めてから$\ 10^9+7\ $で割ったあまりを求めると、 TLE を起こす。
途中で$\ 10^9+7\ $を超える場合、超えた分を$\ M\ $とすると次の計算は$\ (10^9+7) \times i+M \times i\ $となるため、答えとして含まれない$\ 10^9+7\ $を先に引いておけば、$\ M \times i\ $で TLE にならずに計算できる。
n = int(input())
ans = 1
for i in range(1,n+1):
ans = ans * i
ans %= (10 ** 9 + 7)
print(ans)