AtCoder Problems Training Easy(51~60)

#目次

[1~10](https://qiita.com/tnodino/private/fe81289a78c79c53e41e)
[11~20](https://qiita.com/tnodino/private/a2f1118ad8276de714e2)
[21~30](https://qiita.com/tnodino/private/bdce8619699fc9cb3110)
[31~40](https://qiita.com/tnodino/private/426ea11e1509bbe282d8)
[41~50](https://qiita.com/tnodino/private/3e92afbd7fd8396a8118)
51~60 ← 今ココ
[61~70](https://qiita.com/tnodino/private/0997709fa992e538ed36)
[71~80](https://qiita.com/tnodino/private/1249d60df34c0fda8e6e)
[81~90](https://qiita.com/tnodino/private/83c4a61a0361b8995983)
[91~100](https://qiita.com/tnodino/private/88bacef44c037dc9fc89)

#51. [ABC083 B - Some Sums](https://atcoder.jp/contests/abc083/tasks/abc083_b)

**Difficulty:136**

$\ 1 \le i \le N\ $の範囲の中で各桁の和$\ S\ $が、$\ A \le S \le B\ $になるか調べる。
$\ i\ $を別の変数に代入して各桁の和の合計を求め、条件に合えば$\ i\ $を答えに足していけばよい。
各桁の和は例えば$\ 623\ $なら$\ 6+2+3=11\ $である。

```Python
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)
```

#52. [ABC140 C - Maximal Value](https://atcoder.jp/contests/abc140)

**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\ $となっている。

```Python
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](https://atcoder.jp/contests/abc061/tasks/abc061_b)

**Difficulty:136**

都市$$\ 1 \le i \le N\ $の道路$\ i\ $が何本出てくるか数える。
道路は$\ a\ $と$\ b\ $の両方を数える必要がある。

```Python
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](https://atcoder.jp/contests/abc109/tasks/abc109_b)

**Difficulty:152**

同じ単語があるかどうかを確認するために、$\ N\ $と$\ W\ $から重複した単語を消した$\ M\ $の長さを比較する。
もし$\ N \neq M\ $ならこの時点で No である。
$\ N=M\ $ならしりとりができているか調べる。

```Python
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')
```

#55. [ABC133 B - Good Distance](https://atcoder.jp/contests/abc133/tasks/abc133_b)

**Difficulty:146**

$\ i<j\ $となる 2 点を選び、$\ \sqrt{(X_i1-X_j1)^2+(X_i2-X_j2)^2 \dots +(X_iD-X_jD)^2}\ $を計算する。
計算結果が整数かどうか判別する。

```Python
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](https://atcoder.jp/contests/abc093/tasks/abc093_b)

**Difficulty:138**

$\ A\ $から$\ A+K-1\ $までの数値をリストに格納する。
$\ B-K+1\ $から$\ B\ $までの数値をリストに格納する。
リストの重複を消し、ソートしたものを出力する。

```Python
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])
```

#57. [ABC158 C - Tax Increase](https://atcoder.jp/contests/abc158/tasks/abc158_c)

**Difficulty:150**

$\ A/0.08\ $ 、$\ B/0.1\ $でそれぞれの税抜き価格を求める。
税抜き価格は切り上げ、切り捨ての両方を用意する。
それぞれに$\ 0.08\ $、$\ 0.1\ $を掛け、$\ A\ $と$\ B\ $になるか確認する。
一番小さい金額を出力しないといけないことに注意する。

```Python
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](https://atcoder.jp/contests/abc113/tasks/abc113_b)

**Difficulty:166**

地点$\ i\ $の平均気温は$\ T-H_i \times 0.006\ $になり、このなかから$\ A\ $との差の絶対値が一番小さい地点を選ぶ。

```Python
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](https://atcoder.jp/contests/abc104/tasks/abc104_b)

**Difficulty:146**

$\ 1\ $文字目が$\ A\ $か調べる。
$\ 2 \dots N\ $文字に$\ C\ $が 1 つだけあるか調べる。
上二つを除いた文字が全て小文字か調べる。
3 つとも条件を満たせば AC である。
大文字の$\ A,C\ $を取り除けば全て小文字か判断しやすくなる。

```Python
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](https://atcoder.jp/contests/abc050/tasks/abc050_b)

**Difficulty:147**

$\ i\ $番目のドリンクを飲んだら、リストの$\ P_i\ $の値を$\ X_i\ $に置き換え、合計を出力する。
リストはその都度元のリスト$\ T\ $をコピーしておく。
元のリスト$\ T\ $も更新してしまう参照渡しにならないよう注意する。

```Python
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))
```