AtCoder Beginner Contest 168 解説(A~C)
2020/05/17 (日) 21:00-22:40に、AtCoder Beginner Contest 168 が開催されました!
皆さん、お疲れ様でしたー。
私は、ABCの3完で撤退でした。
C問題はゴリゴリの数学でしたね。茶Difficultyはありそう...
では問題について振り返っていきましょう。
A問題 A - ∴ (Therefore)
https://atcoder.jp/contests/abc168/tasks/abc168_a
問題概要:
以下のルールに従って、与えられたに対して、本 というときの「本」の読みを出力して下さい。
- のの位がの時"hon"
- のの位がの時"pon"
- のの位がの時"bon"
解説:
を整数ではなく文字列と考えます。参照する文字列をとします。
- が3桁の時、3桁目をとします。
- が2桁の時、2桁目をとします。
- が1桁の時、そのままそれをとします。
後は、を問題文のルールに従って場合分けし、出力をすればよいでしょう。
コード: https://atcoder.jp/contests/abc168/submissions/13292375
B問題 B - ... (Triple Dots)
https://atcoder.jp/contests/abc168/tasks/abc168_b
問題概要:
文字列と整数が与えられます。
を文字列の長さとしたとき
- ならばを、
- そうでないならの先頭文字と"..."を続けて出力しなさい。
解説:
Pythonでは、文字列の長さをlen()などで取得出来ます。
あとは、文字列の長さについて、条件分岐を行って処理をすれば良いです。
の先頭文字は、Python3ではS[0:K]で取得出来ます。
コード: https://atcoder.jp/contests/abc168/submissions/13298567
C問題 C - : (Colon)
(解説を長くしています)
https://atcoder.jp/contests/abc168/tasks/abc168_b
問題概要:
時針の長さがセンチメートル、分針の長さがセンチメートルであるアナログ時計を考えます。
それぞれの針は一定の角速度で時計回りで回転します。時針は12時間、分針は1時間で1修します。
ちょうど時分になったとき、2本の針の固定されていない位置の距離は何センチメートルでしょうか?
制約
- 入力はすべて整数
入力
入力は以下の形式で標準入力から与えられる。
時計の針の位置について考えましょう。
時針の位置
時分の時、時針が回る角度は真上を度としてから度です。
時針は12時間で1周するので、1分で0.5度回る事に注意して下さい。
なお、制約より、 この角度が360以上になることはありません。
この角度を、以降とおきます。
分針の位置
分の時、分針が回る角度は真上を度として度です。
なお、制約より、この角度が360以上になることはありません。
この角度を、以降とおきます。
時針・分針の角度の求め方
時針が3時を指しているところをとして、円を考えます。
角度について以下のことを行います。
0≦h,m≦90の時、それぞれの針は0度より0時側に度、あるいは度進んでいることになります。
h,mが条件を満たしているとき、それぞれ, と変換します。
90<h,m<360の時、それぞれの針は0時側に度、あるいは度動いていることになります。
h,mが条件を満たしているとき、それぞれ,と変換します。
(度、0度から6時側に進んでいる というのは度、0度から0時側に進んでいる と同じ意味になります。
今回は、90<h,mなので、90度を起点として このような処理を考えました)
少々説明がややこしくなってしまいましたが、このように、時針・分針の角度を考えれば、あとは入力の情報からそれぞれの時針・分針のx座標・y座標を考えれば良いです。
時針のx座標をx_1, y座標をy_1,
分針のx座標をx_2, y座標をy_2 とします。
この時、計算した角度をとおくと、
x_1 =
y_1 =
x_2 =
y_2 =
という座標になります。
後は、(x_1-x_2の絶対値の2乗)+(y_1-y_2の絶対値の2乗) つまりx座標とy座標の距離の差をそれぞれ求めて、それを平方根にしたものが求める距離となります。
Pythonのコードにすると以下のようになります。
コード: https://atcoder.jp/contests/abc168/submissions/13315659
以上、ABC 168のA問題~C問題の解説でした。
(C問題の解説が少々冗長かもしれません....)