東京海上日動プログラミングコンテスト2025(AtCoder Beginner Contest 402)の解説記事です。
ABC402 A – CBC
問題
問題文の要約は以下の通りです。
問題の要約
英大文字と英小文字からなる文字列 \(S\) が与えられます。 \(S\) の英大文字のみを元の順序で連結して得られる文字列を出力せよ。
解説1
大文字の一覧を用意して、1文字ずつ大文字かどうか判定する。
解説
入力を受け取ります。
# 入力
S=input()
答えの文字列ans
を用意します。入力の文字列を順番に見て、大文字のとき答えの文字列に連結します。大文字かどうかはs in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
で判定できます。
# 答えの文字列
ans=''
# 入力の文字列を順番に見る
for s in S:
# 大文字のとき文字を連結する。
if s in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
ans+=s
# 出力
print(ans)
解答
# 入力
S=input()
# 答えの文字列
ans=''
# 入力の文字列を順番に見る
for s in S:
# 大文字のとき文字を連結する。
if s in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
ans+=s
# 出力
print(ans)
解説2
大文字の一覧はstring.ascii_uppercase
で用意されているのでこれを使用する。
string.ascii_uppercase
をそのままprintすると大文字の一覧が出力されます。
import string
print(string.ascii_uppercase)
ABCDEFGHIJKLMNOPQRSTUVWXYZ
解説
string
を使用するのでこれをimport
し、入力を受け取ります。
import string
# 入力
S=input()
答えの文字列ans
を用意します。入力の文字列を順番に見て、大文字のとき答えの文字列に連結します。大文字かどうかはs in string.ascii_uppercase
で判定できます。
# 答えの文字列
ans=''
# 入力の文字列を順番に見る
for s in S:
# 大文字のとき文字を連結する。
if s in string.ascii_uppercase:
ans+=s
# 出力
print(ans)
解答
import string
# 入力
S=input()
# 答えの文字列
ans=''
# 入力の文字列を順番に見る
for s in S:
# 大文字のとき文字を連結する。
if s in string.ascii_uppercase:
ans+=s
# 出力
print(ans)
ABC402 B – Restaurant Queue
問題
問題文の要約は以下の通りです。
問題の要約
はじめ、待ち行列には誰も並んでいません。待ち行列に並ぶ人は必ず、注文する料理のメニュー番号が書かれた食券を持っています。 \(Q\) 個の以下のいずれかの形式のクエリを処理せよ。
1 X
:メニュー番号X
の食券を持った人が行列の末尾に並ぶ。2
:行列の先頭の人をレストランに案内し、その人のメニュー番号を出力する。
解説1
リストで待ち行列を管理する。
リストの最後に追加するにはappend()
、リストの最初の要素を取得し削除するにはpop(0)
を用います。
解説
入力を受け取ります。
# 入力
Q=int(input())
待ち行列のリストを用意し、 \(Q\) 個のクエリを順に受け取ります。
1 X
:メニュー番号X
の食券を持った人が行列の末尾に並ぶ。
1
番目のクエリの場合、リストの最後に追加するにはappend()
を用います。
2
:行列の先頭の人をレストランに案内し、その人のメニュー番号を出力する。
2
番目のクエリの場合、リストの最初の要素を取得し削除するにはpop(0)
を用います。
# リスト
list=[]
# Q個のクエリを処理
for _ in range(Q):
# クエリを受け取り
n,*x= map(int,input().split())
# リストに追加
if n==1:
list.append(x[0])
# 先頭をメニュー番号を出力、先頭を削除
else:
print(list.pop(0))
解答
# 入力
Q=int(input())
# リスト
list=[]
# Q個のクエリを処理
for _ in range(Q):
# クエリを受け取り
n,*x= map(int,input().split())
# リストに追加
if n==1:
list.append(x[0])
# 先頭をメニュー番号を出力、先頭を削除
else:
print(list.pop(0))
解説2
キューで待ち行列を管理する。
キューの最後に追加するにはappend()
、キューの最初の要素を取得するにはque[0]
、削除するにはpopleft()
を用います。
解説
キューを使用するためライブラリをimport
し、入力を受け取ります。
from collections import deque
# 入力
Q=int(input())
待ち行列のキューを用意し、 \(Q\) 個のクエリを順に受け取ります。
1 X
:メニュー番号X
の食券を持った人が行列の末尾に並ぶ。
1
番目のクエリの場合、キューの最後に追加するにはappend()
を用います。
2
:行列の先頭の人をレストランに案内し、その人のメニュー番号を出力する。
2
番目のクエリの場合、キューの最初の要素を取得するにはque[0]
、削除するにはpopleft()
を用います。
# キュー
que=deque()
# Q個のクエリを処理
for _ in range(Q):
# クエリを受け取り
n,*x= map(int,input().split())
# キューに追加
if n==1:
que.append(x[0])
# 先頭をメニュー番号を出力、先頭を削除
else:
print(que[0])
que.popleft()
解答
from collections import deque
# 入力
Q=int(input())
# キュー
que=deque()
# Q個のクエリを処理
for _ in range(Q):
# クエリを受け取り
n,*x= map(int,input().split())
# キューに追加
if n==1:
que.append(x[0])
# 先頭をメニュー番号を出力、先頭を削除
else:
print(que[0])
que.popleft()