CodeQUEEN 2023 予選 (AtCoder Beginner Contest 308)の解説記事です。
ABC308 A – New Scheme
問題
問題文の要約は以下の通りです。
問題の要約
8個の整数 \(S_{1}\), \(S_{2}\), \(\cdots\), \(S_{8}\) を与えたとき、以下の3つの条件がすべて満たされているならば Yes を、そうでないならば No を出力せよ。
・\(S_{1} \le S_{2} \le \cdots \le S_{8}\)
・\(S_{1}\), \(S_{2}\), \(\cdots\), \(S_{8}\) はすべて100以上675以下である。
・\(S_{1}\), \(S_{2}\), \(\cdots\), \(S_{8}\) はすべて25の倍数である。
制約
・\(1 \le S_{i} \le 1000\)
・入力は全て整数
入力
\(S_{1}\) \(S_{2}\) \(\cdots\) \(S_{8}\)
出力
答えを出力せよ。
解説
3つの条件を順番に判定する。
解説
まず入力 \(S\) をlistとして受け取ります。
S=list(map(int,input().split()))\(S\) の大小を比べるために \(S_{i-1}\) の値を格納しておくための変数を用意します。
\(1 \le S_{i}\) なので初期値は0としておきます。
tmp=03つの条件をすべて満足したときは、tmpに \(S_{i}\) を格納し、どれか一つでも満たさないときはNo を出力し終了します。
全ての \(S\) が条件を満たしたとき、Yesを出力します。
for i in range(8):
if tmp<=S[i] and 100<=S[i]<=675 and S[i]%25==0:
tmp=S[i]
else:
print('No')
exit()
print('Yes')解答
S=list(map(int,input().split()))
tmp=0
for i in range(8):
if tmp<=S[i] and 100<=S[i]<=675 and S[i]%25==0:
tmp=S[i]
else:
print('No')
exit()
print('Yes')ABC308 B – Default Price
問題
解説
\(C_{i}\) の皿の色が\(D_{1}\), \(\cdots\), \(D_{M}\) の中にあるか判定し、なければ \(P_{0}\) 円となるように処理する。
解説
まず入力を受け取ります。
n,m=map(int,input().split())
c=list(input().split())
d=list(input().split())
p=list(map(int,input().split()))出力する解答の初期値を0とします。
ans=0flag=Falseと置いておき、\(C_{i}\) の皿の色が \(D_{1}\), \(\cdots\), \(D_{M}\) の中にあればansに \(P_{i+1}\) を足し、flag=Trueとします。flag=Falseの時は、すべての色と異なっているので、ansに \(P_{0}\) を足します。
for i in range(n):
flag=False
for j in range(m):
if c[i]==d[j]:
ans+=p[j+1]
flag=True
if not(flag):
ans+=p[0]最後に結果を出力します。
print(ans)解答
n,m=map(int,input().split())
c=list(input().split())
d=list(input().split())
p=list(map(int,input().split()))
ans=0
for i in range(n):
flag=False
for j in range(m):
if c[i]==d[j]:
ans+=p[j+1]
flag=True
if not(flag):
ans+=p[0]
print(ans)
