0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AtCoder Problems Training Easy(1~10)

Last updated at Posted at 2020-08-24

#目次

1~10 ← 今ココ
11~20
21~30
31~40
41~50
51~60
61~70
71~80
81~90
91~100

#1. ABC139 B - Power Socket

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)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?