LoginSignup
0
0

More than 3 years have passed since last update.

AtCoder Problems Training Easy(51~60)

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

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)

52. ABC140 C - Maximal Value

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

55. ABC133 B - Good Distance

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

57. ABC158 C - Tax Increase

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