【Python】Atcoder Beginner Contest 239 A,B,C問題 解答・解説

この記事は約2分で読めます。

A問題 Horizon

方針

問題文に計算式が記載されているので、この通りに計算を行います。

平方根の計算をするとき、Pythonではmathモジュールを用います。

“import math”でモジュールをインポートし、

“math.sqrt(x)”でxの平方根の計算を行います。

解答

 

B問題 Integer Division

方針

入力値xを10で割った数以下の整数の内、一番大きい整数を表示する問題です。

入力値xが割り切れるかどうか、正負のどちらかの2回に分けてifで条件を分けています。

解答

[1]

“x//10″は少数部分を切り捨てています。

22.4 , 5.5 , 1.7 , 9.1など、xが正の数の時は、10で割った時はその整数部分がそのまま答えになります。

[2]

xが10で割り切ることができず、さらに負の数の時は、xを10で割った数の整数部分をそのまま使うことはできません。

“x//10″とすることで、小数部分は切り下げされ、整数部分が-1されます。

例: “-22.4/10″→-2.2399・・・

“-22.4//10″→-3

C問題

方針

点(x1,y1)、点(x2,y2)のどちらからもユークリッド距離が√5となる点(a,b)が存在するかを調べる問題です。

問題文の2点間の距離の求め方から、以下の2つの式を同時に満たせばYesと出力すれば良いと思います。

※左右の辺をそれぞれ2乗しています。

①(x1-a)**2 + (y1-b)**2 = 5

②(x2-a)**2 + (y2-b)**2 = 5

この2つを満たすときに点(a,b)は、点(x1,y1)と点(x2,y2)のどちらからも√5の距離に位置しています。

ユークリッド距離が√5になるためには、点(a,b)と点(x,y)はそれぞれのx座標とy座標が±2までの変動幅に収まる必要があります。

そのため、-2~2までをfor文で繰り返し、最初の①、②の式を満たすかを確認します。

解答

余談ですが、|x-a|=1、|y-b|=2、もしくは|x-a|=2、|y-b|=1のどちらかを必ず満たすように見えています。

|x-a|=0、|y-b|=5、もしくは|x-a|=5、|y-b|=0というパターン、つまりx座標かy座標のどちらか一方だけが動くパターンもあるかなと思ったのですが、listには0が含まれていなくとも正解になりました。

コメント