ABC205参戦記

プログラミング

ここ最近のABCは、参加するたびにレートが下がり続けていますが、めげずに参加したABC205の参加記録です。
AからC問題まで、自分が理解した内容で書いていきます。
使用言語は、Python3で、レートは茶色下位です。

A – kcal

標準入出力と、四則演算が出来るかを問われる問題。

Python3での標準入力については、input()を利用します。1行に複数の変数が含まれる場合は、map()を利用するのがよいですね。

1mlに含まれるカロリーを計算してから、容量を書ければOKですね。

# AtCoder Beginner Contest 205
# A - kcal

A,B=map(int,input().split())

print((A/100)*B)

割り算を示す演算子はPython3では、 ” / ” ですね。
C++だと型を意識して使用していないと切り捨てになったりもするようです。

B – Permutation Check

配列のソート、繰り返し処理が書けるかが問われる問題。

受け取った配列をソートして、1からNまでの配列になっていたらOKです。
ソートは、listに、sort() を利用することで小さいほうから順に並びます。
あとは、for文で、1から順番に並んでいるかを確認すればOKですね。
一つでも異なる数があったら”No”を出力してプログラムを終了するようにします。

繰り返し処理が無事、すべて終わったら”Yes”を出力すれば良いですね。

# AtCoder Beginner Contest 205
# B - Permutation Check

N=int(input())
A=list(map(int,input().split()))
A.sort()

for i in range (1,N+1):
    if i==A[i-1]:
        continue
    else:
        print("No")
        exit()

print("Yes")

for文のiは1から始まるのに対して、配列は0番目からはじまる点に注意が必要です。

ほかにも、setを利用してもAC出来ますね。

N=N=int(input())
A=set(map(int,input().split()))
S=set(i for i in range (1,N+1))
if A==S:
    print("Yes")
else:
    print("No")

C – POW

累乗に関する法則を問われる問題。
そして、それの場合分けを丁寧に出来るかを問われる問題。

制約が大きいことより、力業でA**Cや、B**Cを計算することは出来ません。
A,Bともに、正の数であれば、C乗しても、AとBの大小関係は変わりません。
A,Bともに、負の数の時、Cが偶数の時に、AをC乗した時、正の数となり、Cが奇数の時には、負の数になります。

Aが-2 Bが-3(A>B)で考えると、

  • C=1の時、A**C= -2、B**C= -3 => A > B
  • C=2の時、A**C= 4、B**C= 9 => B > A
  • C=3の時、A**C= -8、B**C= -27 => A > B

このように、AとBの大小関係、正負の関係と、Cの偶奇で考えていきました。
しかし途中で、Cが偶数の場合は、場合分けが少なくなることに気づきました。
Cが偶数の場合は、AとBの絶対値の関係性から崩れることがないため、まずはCが偶数の場合の処理を書きます。

次に、Cが奇数の時は、AとBがともに正の場合、ともに負の場合、Aが正でBが負の場合、Aが負でBが正の場合、A==Bの場合を丁寧に書いていけばACします。

# AtCoder Beginner Contest 205
# C - POW

A,B,C=map(int,input().split())

if C%2==0:
    if abs(A)==abs(B):
        print("=")
    elif abs(A)>abs(B):
        print(">")
    else: # abs(A)<abs(B):
        print("<")
else:
    if A==B:
        print("=")
    elif A>=0 and B>=0:
        if abs(A) > abs(B):
            print(">")
        else:
            print("<")
    elif A<0 and B<0:
        if abs(A) > abs(B):
            print("<")
        else:
            print(">")
    elif A>=0 and B<0:
        print(">")
    elif A<0 and B>=0:
        print("<")

コメント

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