ABC224参戦記

プログラミング

直近2回のコンテストでレートを溶かしてしまいました。
レートは過剰に意識はしていないつもりですが、上がると嬉しいですし、下がると悔しいものですね。

今回のABC224で少しでも戻せると良いなと思って参加しました。

使用言語はPython3です。レートは600程度です。数学的に厳密な話などは出来ませんが、自分が理解した内容を記載しています。

A – Tires

標準入出力と条件分岐、文字列の扱いが出来るかが問われる問題。

問題文の通り実装するのであれば、後ろ2文字が ” er ” かどうかを判定すれば良いですね。
実際には、最後の1文字が ‘ r ‘ かどうかを判定すれば良いので、私はこちらのコードで提出しました。

# AtCoder Beginner Contest 224
# A - Tires

S=input()
if S[-1]=='r':
    print("er")
else:
    print("ist")

B – Mongeness

繰り返し処理と条件分岐が書けるかが問われる問題。

問題文に書いてある通りに実行すればOKですが、4重の for 文になるので、ちょっとドキドキします。
今回は制約が小さいため、TLEにならないです。

途中で条件に合わない部分が出てきたら “No” を出力して、プログラムを停止させて、for文全てが実行された場合は、 “Yes” を出力すればOKですね。

# AtCoder Beginner Contest 224
# B - Mongeness

H,W=map(int,input().split())
F=[]
for i in range (H):
    F.append(list(map(int,input().split())))
# print(F)
for i1 in range (H):
    for i2 in range (H):
        for j1 in range (W):
            for j2 in range (W):
                if i1 >=i2 or j1 >=j2:
                    continue
                if F[i1][j1]+F[i2][j2] <= F[i2][j1]+F[i1][j2]:
                    continue
                else:
                    print("No")
                    exit()
print("Yes")

C – Triangle?

xy平面の2点の傾きを計算できるかを問われる問題。

ABC181のC – Collinearity の類題ですね。
ABC181-Cは解けなかったのですが、今回は比較的スムーズに解けたので、少しずつ成長していると思いたいです。

三角形の面積が正の面積を持つためには、3点の組み合わせで、2点間の傾きが等しくない場合の数を数えればOKです。

3点をA,B,Cとした場合、AとB、AとCの傾きが等しいかを確認する場合には、AとBとの傾きを yの増加量 / xの増加量 で求めて、同じことをAとCで実施すればOKですね。
実際の判定式を書く時には、除算を使用すると、0除算の問題や、少数の精度問題が出てくるので、掛け算の形にして判定しています。

# AtCoder Beginner Contest 224
# C - Triangle?

N=int(input())
P=[]
for i in range (N):
    X,Y=map(int,input().split())
    P.append([X,Y])

ans=0

for i in range (N):
    for j in range (i+1,N):
        for k in range (j+1,N):
            a, b, c = P[i], P[j], P[k]
            if (b[1]-a[1]) * (c[0]-a[0]) == (c[1]-a[1]) * (b[0]-a[0]):
                continue
            else:
                ans+=1

print(ans)

コメント

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