ABC209参戦記

プログラミング

前回は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)

コメント

タイトルとURLをコピーしました