🔥
【AtCoder】ABC402をPythonで解く
1. はじめに
目的
ABCを解くことにより、とにかくRatingを上げていく。
注意点
言語はPython(PyPy 3.10-v7.3.12) を使用しています。
コンテスト情報
コンテスト名
AtCoder Beginner Contest 402
コンテストURL
開催日
2025-04-19(土) 21:00 ~ 2025-04-19(土) 22:40 (100分)
配点
問題 | 点数 |
---|---|
A | 100 |
B | 200 |
C | 300 |
D | 400 |
E | 450 |
F | 525 |
G | 650 |
結果
順位:9129/10236
総合 | A | B | C | D | E | F | G | |
---|---|---|---|---|---|---|---|---|
得点 | 300 | 100 | 200 | (1) | ||||
時間 | 48:05 | 23:21 | 48:05 |
2. 問題と解法
CBC
A:コード
s = str(input())
app_letter = [i for i in s if i.isupper()]
print("".join(app_letter))
解法
- 文字列
に対して、各文字が大文字かどうかを順に判断した。S -
メソッドを使って、大文字と判別された文字を順番にリストisupper に格納していった。app\_letter -
メソッドを使って、リスト内の文字を結合し、一つの文字列として出力した。join
改善点
+ ans = ""
わざわざリストを用意する必要もなく、空の文字列を用意するだけでよかった。
Restaurant Queue
B:コード
q = int(input())
order = []
query = [input().split() for _ in range(q)]
j = 0
for i in range(q):
if len(query[i]) == 1:
print(order[j])
j += 1
elif len(query[i]) == 2:
a = int(query[i][0])
order.append(int(query[i][1]))
解法
- リスト
にすべてのクエリをリストの形で格納した。query - リスト
はquery になっており、外側のリストのインデックスは、クエリを処理する順番に対応している。list\ of\ list - 各クエリは
つの要素からなり、2 番目の要素が操作の種類、0 番目の要素が対象の食券番号に対応している。(種類1 のクエリには2 番目の要素がない)1 - 処理すべきクエリの数は
個なので、Q 回のループで全てのクエリを処理できる。Q - クエリの種類が
であれば、リスト1 に食券番号を追加し、種類がorder であれば2 の中から条件に従って出力を行う。order
改善点
- query = [input().split() for _ in range(q)]
+ for _ in range(q):
+ query = list(map(int, input().split()))
そもそも各クエリはループ処理1回ごとに値を受け取るだけでいい。
from collections import deque
q = int(input())
query = deque()
for _ in range(q):
t, *x = map(int,input().split())
if t == 1:
query.append(x[0])
else:
print(que[0])
query.popleft()
この問題では、先入れ先だしFIFOのデータ構造をとる。
これをpythonで実行するには、collectionsライブラリのdequeを使うと容易に実装できる。
3. 解けなかった問題
Dislike Foods
C:コード
N, M = map(int, input().split())
disliked_count = [0] * M
ingredient_to_dishes = [[] for _ in range(N)]
for i in range(M):
data = list(map(int, input().split()))
K = data[0]
ingredients = data[1:]
disliked_count[i] = K
for ing in ingredients:
ingredient_to_dishes[ing - 1].append(i)
B = list(map(int, input().split()))
ans = 0
res = []
for b in B:
b -= 1
for dish in ingredient_to_dishes[b]:
disliked_count[dish] -= 1
if disliked_count[dish] == 0:
ans += 1
res.append(ans)
for r in res:
print(r)
Discussion