#目次
1~10 ← 今ココ
11~20
21~30
31~40
41~50
51~60
61~70
71~80
81~90
91~100
Difficulty:62
最初に 1 個の差込口があり、$\ A\ $個口の電源タップを使うと$\ A-1\ $ 個差込口が増えるので、$\ B\ $ 個以上になるまで増やす。
ただ、$\ B=1\ $の場合、そもそも電源タップが必要ないので 0 個になる。
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
Difficulty:68
$\ P\ $の座標が$\ \min(X)\ $より小さいと全員が$\ \min(X) -P\ $、$\ \max(X)$ より大きいと全員が$\ P- \max(X)\ $ の距離を無駄に歩くことになるため、$\ P\ $ の範囲は$\ \min(X) \le P \le \max(X)\ $となる。
あとは考えられる座標$\ P\ $それぞれで計算し、全員が消費する最小の体力を調べる。
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
Difficulty:62
$\ a\ $の場合は通過人数が$\ A+B\ $人以下の時に通過。
$\ b\ $の場合は通過人数が$\ A+B\ $人かつ、$\ b\ $の通過人数が$\ B\ $人以下の時に通過。
以上の条件から予選を通過した人数、予選を通過した$\ b\ $の人数を数えておき、通過できるか判定していく。
例3 のように、$\ c\ $はこの予選に関与しない点に注意する。
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
Difficulty:65
消費税前の値段$\ N/1.08\ $を求めておき、これを$\ X\ $とする。
その後、$\ \lfloor X×1.08 \rfloor =N\ $になるかを調べる。
ただし、$\ X\ $は丁度割り切れないこともあるので、$\ X\ $を切り捨て、切り上げした値段両方を調べる必要がある。
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?
Difficulty:72
問題文の通りに、$\ A_{i1}B_1 + A_{i2}B_2 + ... + A_{iM}B_M + C > 0\ $になるかを実際に計算して調べる。
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
Difficulty:105
マスの数は$\ H * W\ $になり、これを$\ N\ $とする。
例1 、 例2 の図から、大体半分くらいのマスに移動できることが分かる。
$\ N\ $が奇数なら移動可能なマスは$\ \lceil N/2 \rceil\ $。
$\ N\ $が偶数なら移動可能なマスは$\ N/2\ $。
ただし$\ H,W\ $のどちらかが$\ 1\ $の場合は絶対に斜めに動けず、答えは$\ 1\ $になる。
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
Difficulty:76
まずビンゴカードに数字があるか調べ、印をつけておく。
その後、縦横斜めでビンゴしているかを 8 通り全て調べる。
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
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\ $ になるか調べる。
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)
Difficulty:71
ロボット$\ A\ $は$\ x_i\ $番目のボールを取るのに$\ x_i \times 2\ $の距離を歩き、ロボット$\ B\ $は$\ x_i\ $番目のボールを取るのに$\ (k-x_i) \times 2\ $の距離を歩く必要がある。
$\ x_i\ $のボールに対して$\ A\ $と$\ B\ $のうち、歩く距離が短い方にボールを取らせに行く。
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
Difficulty:75
最適な戦略とは、その場に残っている$\ \max(a)\ $のカードを取り続けること。
$\ a\ $を降順にソートすれば、Alice から交互にカードを取り合うので Alice は偶数枚目、 Bob は奇数枚目を全て取ればいいことが分かる。
あとは Alice の点数から Bob の点数を引いて答えを求める。
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)