#目次
1~10
11~20
21~30
31~40
41~50
51~60 ← 今ココ
61~70
71~80
81~90
91~100
#51. ABC083 B - Some Sums
Difficulty:136
$\ 1 \le i \le N\ $の範囲の中で各桁の和$\ S\ $が、$\ A \le S \le B\ $になるか調べる。
$\ i\ $を別の変数に代入して各桁の和の合計を求め、条件に合えば$\ i\ $を答えに足していけばよい。
各桁の和は例えば$\ 623\ $なら$\ 6+2+3=11\ $である。
n,a,b = map(int,input().split())
ans = 0
for i in range(1,n+1):
x = i
y = 0
while x > 0:
y += x % 10
x = x // 10
if a <= y <= b:
ans += i
print(ans)
Difficulty:138
条件を満たす整数列$\ A\ $を作っていく。
$\ A_i\ $は$\ \min(B_{i-1},B_i)\ $で決めることができるが、$\ A_0\ $と$\ A_N\ $に関しては比較対象が 1 つしかないためそのまま代入できる。
例3の場合、$\ A\ $は$\ 0,0,10,10,10,23=53\ $となっている。
n = int(input())
b = list(map(int,input().split()))
a = [b[0]]
for i in range(n-2):
a.append(min(b[i],b[i+1]))
a.append(b[-1])
print(sum(a))
#53. ABC061 B - Counting Roads
Difficulty:136
都市$$\ 1 \le i \le N\ $の道路$\ i\ $が何本出てくるか数える。
道路は$\ a\ $と$\ b\ $の両方を数える必要がある。
n,m = map(int,input().split())
l = [list(map(int,input().split())) for i in range(m)]
a,b = [list(i) for i in zip(*l)]
for i in range(1,n+1):
r = 0
r += a.count(i)
r += b.count(i)
print(r)
#54. ABC109 B - Shiritori
Difficulty:152
同じ単語があるかどうかを確認するために、$\ N\ $と$\ W\ $から重複した単語を消した$\ M\ $の長さを比較する。
もし$\ N \neq M\ $ならこの時点で No である。
$\ N=M\ $ならしりとりができているか調べる。
n = int(input())
w = list(input() for i in range(n))
if n != len(set(w)):
print('No')
else:
for i in range(n - 1):
if w[i][-1] != w[i + 1][0]:
print('No')
exit(0)
print('Yes')
Difficulty:146
$\ i<j\ $となる 2 点を選び、$\ \sqrt{(X_i1-X_j1)^2+(X_i2-X_j2)^2 \dots +(X_iD-X_jD)^2}\ $を計算する。
計算結果が整数かどうか判別する。
from math import sqrt
n,d = map(int,input().split())
x = [list(map(int,input().split())) for i in range(n)]
ans = 0
for i in range(n):
for j in range(i+1,n):
t = 0
for k in range(d):
t += (x[i][k] - x[j][k]) ** 2
if float.is_integer(sqrt(t)):
ans += 1
print(ans)
#56. ABC093 B - Small and Large Integers
Difficulty:138
$\ A\ $から$\ A+K-1\ $までの数値をリストに格納する。
$\ B-K+1\ $から$\ B\ $までの数値をリストに格納する。
リストの重複を消し、ソートしたものを出力する。
a,b,k = map(int,input().split())
t = []
for i in range(a,a+k):
if i <= b:
t.append(i)
for i in range(b-k+1,b+1):
if i >= a:
t.append(i)
t = list(set(t))
t.sort()
for i in range(len(t)):
print(t[i])
Difficulty:150
$\ A/0.08\ $ 、$\ B/0.1\ $でそれぞれの税抜き価格を求める。
税抜き価格は切り上げ、切り捨ての両方を用意する。
それぞれに$\ 0.08\ $、$\ 0.1\ $を掛け、$\ A\ $と$\ B\ $になるか確認する。
一番小さい金額を出力しないといけないことに注意する。
from math import floor
from math import ceil
a,b = map(int,input().split())
n = floor(a / 0.08)
m = floor(b / 0.1)
n2 = ceil(a / 0.08)
m2 = ceil(b / 0.1)
p = floor(n * 0.08)
q = floor(n * 0.1)
p2 = floor(n2 * 0.08)
q2 = floor(n2 * 0.1)
x = floor(m * 0.08)
y = floor(m * 0.1)
x2 = floor(m2 * 0.08)
y2 = floor(m2 * 0.1)
if p == a and q == b and x == a and y == b:
print(min(n,m))
elif p == a and q == b:
print(n)
elif x == a and y == b:
print(m)
elif p2 == a and q2 == b and x2 == a and y2 == b:
print(min(n2,m2))
elif p2 == a and q2 == b:
print(n2)
elif x2 == a and y2 == b:
print(m2)
else:
print(-1)
#58. ABC113 B - Palace
Difficulty:166
地点$\ i\ $の平均気温は$\ T-H_i \times 0.006\ $になり、このなかから$\ A\ $との差の絶対値が一番小さい地点を選ぶ。
n = int(input())
t,a = map(int,input().split())
h = list(map(int,input().split()))
p = 10 ** 8
ans = 0
for i in range(n):
x = t - h[i] * 0.006
x = abs(a - x)
if p > x:
p = x
ans = i + 1
print(ans)
#59. ABC104 B - AcCepted
Difficulty:146
$\ 1\ $文字目が$\ A\ $か調べる。
$\ 2 \dots N\ $文字に$\ C\ $が 1 つだけあるか調べる。
上二つを除いた文字が全て小文字か調べる。
3 つとも条件を満たせば AC である。
大文字の$\ A,C\ $を取り除けば全て小文字か判断しやすくなる。
s = list(input())
if s[0] != 'A':
print('WA')
elif s[2:-1].count('C') != 1:
print('WA')
else:
i = s.index('C')
s.pop(i)
s.pop(0)
s = ''.join(s)
if s.islower():
print('AC')
else:
print('WA')
#60. ABC050 B - Contest with Drinks Easy
Difficulty:147
$\ i\ $番目のドリンクを飲んだら、リストの$\ P_i\ $の値を$\ X_i\ $に置き換え、合計を出力する。
リストはその都度元のリスト$\ T\ $をコピーしておく。
元のリスト$\ T\ $も更新してしまう参照渡しにならないよう注意する。
n = int(input())
t = list(map(int,input().split()))
m = int(input())
l = [list(map(int,input().split())) for i in range(m)]
a,b = [list(i) for i in zip(*l)]
for i in range(m):
s = list(t)
j = a[i] - 1
s[j] = b[i]
print(sum(s))