はじめに
Python で「AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~」を解きました。
言語
解いたコードは AtCoder の下記言語で AC になることを確認しました。
Python (CPython 3.11.4)
コーディングスタイル
解いたコードは pycodestyle の下記バージョンでコーディングスタイルを確認しました。
pycodestyle 2.12.1
コードリポジトリ
解いたコードは下記のリポジトリで公開しています。
第1問 ABC086A - Product
a, b = map(int, input().split())
print("Even" if a*b % 2 == 0 else "Odd")
【解説】a*b
を2
で割った余りが0
となる場合はEven
、0
とならない場合はOdd
を出力します。[提出結果]
第2問 ABC081A - Placing Marbles
s = input()
print(s.count("1"))
【解説】入力された文字列s
の中にある文字1
の数を出力します。[提出結果]
第3問 ABC081B - Shift only
N = int(input())
A = list(map(int, input().split()))
count = 0
while all(a % 2 == 0 for a in A):
A = [a/2 for a in A]
count += 1
print(count)
【解説】リストA
のすべての要素が2
で割り切れなくまで、リストA
のすべての要素を2
で割り続けます。リストA
のすべての要素が2
で割り切れなくなるまでの数を出力します。[提出結果]
第4問 ABC087B - Coins
A, B, C, X = [int(input()) for i in range(4)]
count = 0
for a in range(A+1):
for b in range(B+1):
for c in range(C+1):
if 500*a+100*b+50*c == X:
count += 1
print(count)
【解説】下記の方程式を満たす数を出力します。[提出結果]
500a+100b+50c=X (0≦a≦A, 0≦b≦B, 0≦c≦C)
第5問 ABC083B - Some Sums
N, A, B = map(int, input().split())
print(sum(i for i in range(1, N+1) if A <= sum(map(int, str(i))) <= B))
【解説】1
以上N
以下の整数i
の各桁の和がA
以上B
以下を満たすi
の総和を出力します。[提出結果]
第6問 ABC088B - Card Game for Two
N = int(input())
a = sorted(map(int, input().split()))[::-1]
print(sum(a[::2])-sum(a[1::2]))
【解説】入力されたデータを降順でソートし、リストa
に格納します。「リストa
の偶数番目の和」と「リストa
の奇数番目の和」の差を出力します。[提出結果]
第7問 ABC085B - Kagami Mochi
N = int(input())
d = [input() for i in range(N)]
print(len(set(d)))
【解説】入力されたリストd
の要素の重複をなくして、要素の数を出力します。[提出結果]
第8問 ABC085C - Otoshidama
N, Y = map(int, input().split())
for x in range(N+1):
for y in range(N-x+1):
z = N-x-y
if 0 <= z <= 2000 and 10000*x+5000*y+1000*z == Y:
print(x, y, z)
exit()
print(-1, -1, -1)
【解説】下記の連立方程式を満たす x, y, z がある場合はx y z
の値を出力し、満たす x, y, z がない場合は-1 -1 -1
を出力します。[提出結果]
\left\{
\begin{array}{ll}
z=N-x-y & (0≦z≦2000) \\
10000x+5000y+1000z=Y & (0≦x≦N, 0≦y≦N-x)
\end{array}
\right.
第9問 ABC049C - 白昼夢
import re
S = input()
print("YES" if re.match("^(dream|dreamer|erase|eraser)+$", S) else "NO")
【解説】入力された文字列S
が「dream」「dreamer」「erase」「eraser」のいずれかを1回以上繰り返されている場合はYES
、繰り返されていない場合はNO
を出力します。[提出結果]
第10問 ABC086C - Traveling
N = int(input())
count = 0
pt, px, py = 0, 0, 0
for i in range(N):
t, x, y = map(int, input().split())
if abs(x-px)+abs(y-py) <= t-pt and t % 2 == (x+y) % 2:
count += 1
pt, px, py = t, x, y
print("Yes" if count == N else "No")
【解説】下記の条件を満たす場合の数がN
と同じ場合はYes
、N
と異なる場合はNo
を出力します。[提出結果]
\left\{
\begin{array}{ll}
|x-px|+|y-py|≦t-pt \\
t\%2=(x+y)\%2
\end{array}
\right.
参考
本記事は下記を参考にしました。