AtCoder Problems Training Easy(1~10)

#目次

1~10 ← 今ココ
[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](https://qiita.com/tnodino/private/62637218c5884b2af10d)
[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)

#1. [ABC139 B - Power Socket](https://atcoder.jp/contests/abc139/tasks/abc139_b)

**Difficulty:62**

最初に 1 個の差込口があり、$\ A\ $個口の電源タップを使うと$\ A-1\ $ 個差込口が増えるので、$\ B\ $ 個以上になるまで増やす。
ただ、$\ B=1\ $の場合、そもそも電源タップが必要ないので 0 個になる。

```Python
a,b = map(int,input().split())
a -= 1
n = 1
ans = 0
while n < b:
    n += a
    ans += 1
print(ans)
```

#2. [ABC156 C - Rally](https://atcoder.jp/contests/abc156/tasks/abc156_c)

**Difficulty:68**

$\ P\ $の座標が$\ \min(X)\ $より小さいと全員が$\ \min(X) -P\ $、$\ \max(X)$ より大きいと全員が$\ P- \max(X)\ $ の距離を無駄に歩くことになるため、$\ P\ $ の範囲は$\ \min(X) \le P \le \max(X)\ $となる。
あとは考えられる座標$\ P\ $それぞれで計算し、全員が消費する最小の体力を調べる。

```Python
n = int(input())
x = list(map(int,input().split()))
a = min(x)
b = max(x) + 1
ans = 10 ** 8
for p in range(a,b):
    m = 0
    for i in range(n):
        m += (x[i] - p) ** 2
    ans = min(ans,m)
print(ans)
```

#3. [CODE FESTIVAL 2016 qual B B - Qualification simulator](https://atcoder.jp/contests/code-festival-2016-qualb/tasks/codefestival_2016_qualB_b)

**Difficulty:62**

$\ a\ $の場合は通過人数が$\ A+B\ $人以下の時に通過。
$\ b\ $の場合は通過人数が$\ A+B\ $人かつ、$\ b\ $の通過人数が$\ B\ $人以下の時に通過。
以上の条件から予選を通過した人数、予選を通過した$\ b\ $の人数を数えておき、通過できるか判定していく。
例3 のように、$\ c\ $はこの予選に関与しない点に注意する。

```Python
n,a,b = map(int,input().split())
s = input()
x = a + b
y = 1
z = 1
for i in range(n):
    if s[i] == 'a':
        if y <= x:
            print('Yes')
            y += 1
        else:
            print('No')
    elif s[i] == 'b':
        if y <= x and z <= b:
            print('Yes')
            y += 1
            z += 1
        else:
            print('No')
    else:
        print('No')
```

#4. [三井住友信託銀行プログラミングコンテスト2019 B - Tax Rate](https://atcoder.jp/contests/sumitrust2019/tasks/sumitb2019_b)

**Difficulty:65**

消費税前の値段$\ N/1.08\ $を求めておき、これを$\ X\ $とする。
その後、$\ \lfloor X×1.08 \rfloor =N\ $になるかを調べる。
ただし、$\ X\ $は丁度割り切れないこともあるので、$\ X\ $を切り捨て、切り上げした値段両方を調べる必要がある。

```Python
from math import ceil
from math import floor
n = int(input())
x = n / 1.08
if floor(floor(x) * 1.08) == n:
    print(floor(x))
elif floor(ceil(x) * 1.08) == n:
    print(ceil(x))
else:
    print(':(')
```

#5. [ABC121 B - Can you solve this?](https://atcoder.jp/contests/abc121/tasks/abc121_b)

**Difficulty:72**

問題文の通りに、$\ A_{i1}B_1 + A_{i2}B_2 + ... + A_{iM}B_M + C > 0\ $になるかを実際に計算して調べる。

```Python
n,m,c = map(int,input().split())
b = list(map(int,input().split()))
a = [(list(map(int,input().split()))) for i in range(n)]
ans = 0
for i in range(n):
    z = c
    for j in range(m):
        z += a[i][j] * b[j]
    if z > 0:
        ans += 1
print(ans)
```

#6. [パナソニックプログラミングコンテスト2020 B - Bishop](https://atcoder.jp/contests/panasonic2020/tasks/panasonic2020_b)

**Difficulty:105**

マスの数は$\ H * W\ $になり、これを$\ N\ $とする。
例1 、 例2 の図から、大体半分くらいのマスに移動できることが分かる。
$\ N\ $が奇数なら移動可能なマスは$\ \lceil N/2 \rceil\ $。
$\ N\ $が偶数なら移動可能なマスは$\ N/2\ $。
ただし$\ H,W\ $のどちらかが$\ 1\ $の場合は絶対に斜めに動けず、答えは$\ 1\ $になる。

```Python
h,w = map(int,input().split())
if h == 1 or w == 1:
    print(1)
elif h * w % 2 == 0:
    print(h * w // 2)
else:
    print(h * w // 2 + 1)
```

#7. [ABC157 B - Bingo](https://atcoder.jp/contests/abc157/tasks/abc157_b)

**Difficulty:76**

まずビンゴカードに数字があるか調べ、印をつけておく。
その後、縦横斜めでビンゴしているかを 8 通り全て調べる。

```Python
a = [list(map(int,input().split())) for i in range(3)]
n = int(input())
for i in range(n):
    b = int(input())
    for x in range(3):
        for y in range(3):
            if a[x][y] == b:
                a[x][y] = 'o'
for x in range(3):
    if a[x][0] == a[x][1] == a[x][2] == 'o':
        print('Yes')
        exit(0)
for y in range(3):
    if a[0][y] == a[1][y] == a[2][y] == 'o':
        print('Yes')
        exit(0)
if a[0][0] == a[1][1] == a[2][2] == 'o':
    print('Yes')
elif a[0][2] == a[1][1] == a[2][0] == 'o':
    print('Yes')
else:
    print('No')
```

#8. [ABC086 B - 1 21](https://atcoder.jp/contests/abc086/tasks/abc086_b)

**Difficulty:71**

$\ a\ $と$\ b\ $をつなげて$\ c\ $とする。
平方数は$\ N^2\ $が取る数値なので、$\ N^2\ $が$\ c\ $になるような数値があるかを調べる。
$\ 1 \le a,b \le 100\ $ なので$\ c\ $の最大値は 例2 の$\ 100100\ $であり、大体$\ 300^2 \le 100100 \le 400^2\ $となるため、$\ 1 \le i \le 400\ $の範囲で$\ i^2=c\ $ になるか調べる。

```Python
a,b = input().split()
c = a + b
c = int(c)
for i in range(1,400):
    if c == i * i:
        print('Yes')
        exit(0)
print('No')
```

#9. [ABC074 B - Collecting Balls (Easy Version)](https://atcoder.jp/contests/abc074/tasks/abc074_b)

**Difficulty:71**

ロボット$\ A\ $は$\ x_i\ $番目のボールを取るのに$\ x_i \times 2\ $の距離を歩き、ロボット$\ B\ $は$\ x_i\ $番目のボールを取るのに$\ (k-x_i) \times 2\ $の距離を歩く必要がある。 
$\ x_i\ $のボールに対して$\ A\ $と$\ B\ $のうち、歩く距離が短い方にボールを取らせに行く。

```Python
n = int(input())
k = int(input())
x = list(map(int,input().split()))
ans = 0
for i in range(n):
    a = x[i] * 2
    b = (k - x[i]) * 2
    ans += min(a,b)
print(ans)
```

#10. [ABC088 B - Card Game for Two](https://atcoder.jp/contests/abc088/tasks/abc088_b)

**Difficulty:75**

最適な戦略とは、その場に残っている$\ \max(a)\ $のカードを取り続けること。
$\ a\ $を降順にソートすれば、Alice から交互にカードを取り合うので Alice は偶数枚目、 Bob は奇数枚目を全て取ればいいことが分かる。
あとは Alice の点数から Bob の点数を引いて答えを求める。

```Python
n = int(input())
a = list(map(int,input().split()))
a.sort(reverse = True)
Alice = sum(a[::2])
Bob = sum(a[1::2])
print(Alice - Bob)
```