前回はAC2完、前々回はAB2完と結果が安定しません。
今回こそ、ABC3完までスムーズにいくと良いな。と思いつつ参加したABC209の参加記録です。
使用言語はPython3です。レートは茶色中位と下位の間くらいです。
A – Counting
標準入出力と、条件分岐の問題。
B-A+1
の植木算をすればよいですね。ただし、制約で、A≦Bが保証されていないため、A>B の場合は 0 を出力する必要があります。
# AtCoder Beginner Contest 209
# A - Counting
A,B=map(int,input().split())
if A>B:
print(0)
else:
print(B-A+1)
条件分岐させるのは、B-Aが負になる場合のため、負なる場合は、0を出力するように、max() 関数を利用して、条件分岐をなくすことも可能です。
A,B=map(int,input().split())
print(max(0,B-A+1))
B – Can you buy them all?
繰り返し処理と、偶奇判定が出来るかを問われる問題。
偶奇判定は2で割った余りが0か1で判定可能です。
繰り返し処理をしていき、都度トータルの価格を加算していき、トータルの金額がX以下であれば”Yes”を出力し、X未満の場合は”No”が出力されるようにすればOKですね。
for文で使うrangeオブジェクトをrange(N)で作成すると、0からN-1までが作成されるため、1スタートではなく、0スタートであることに注意する必要があります。
問題文中に書いてある1番目は、0ですし、、問題文中に書いてある2番目は、1になります。
# AtCoder Beginner Contest 209
# B - Can you buy them all?
N,X=map(int,input().split())
A=list(map(int,input().split()))
total=0
for i in range (N):
if i%2==0:
total+=A[i]
else:
total+=A[i]-1
if X>=total:
print("Yes")
else:
print("No")
C – Not Equal
順列のようなものを考える問題。
難しかったです。条件のAi≠Aj(i<j)より、Aの配列は同じ数があったらダメなことがわかります。
これにより、前から順番に選択できる数は前に選んだ数-1とCiの値の間になりそうなことがわかります。
しかし、Cの配列の途中に1があった場合、そこのAiは1を選択するしかないことから、Cの配列の小さいほうから見ていけばよいことがわかりました。
あとは、C0 から、順番に1減らしていった数をmodを取りながら掛けていけばACします。
# AtCoder Beginner Contest 209
# C - Not Equal
N=int(input())
c=list(map(int,input().split()))
mod=10**9+7
c.sort()
ans=1
for i in range (N):
ans*=c[i]-i
ans%=mod
print(ans)
コメント