こんにちは, Shinoryoです.
今回はAtCoder Beginner Contest 181を, Pythonで解いてみた結果を書き連ねていこうと思います.
AtCoder Beginner Contest 181 - AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
A - Heavy Rotation
偶数なら「White」, 奇数なら「Black」を出力すれば問題ないであろう.
B - Trapezoid Sum
$A_i$から$B_i$までの整数の合計は, 等差数列の公式で
となるから, これを$N$個に対して合計すればよい. 2で割ったことによって変数ansがint型ではなくなってしまったので, 最後にint型にして出力している.
C - Collinearity
3点$(x_1 , y_1) , (x_2 , y_2) , (x_3 , y_3)$が1直線上にあるには, 2点$(x_1 , y_1) , (x_2 , y_2)$を結ぶ直線の傾きが, 2点$(x_1 , y_1) , (x_3 , y_3)$を結ぶ直線の傾きに等しければよい. すなわち,
となればよい. $x_1 = x_2$, $x_1 = x_3$のときにも利用できるように,
とすればよい.
この判定を, $N$個の点の組み合わせの数だけ実行すればよい. エラーにならないようにfor文の繰り返す範囲には注意されたい.
D - Hachi
8の倍数を判定するには, 「下3桁が8で割り切れればよい」という判定方法を利用する. しかし, 愚直に実行するとTLE.
そこで, リストの要素の数え上げをできるcollections.Counter()を利用する. collections.Counter()を利用することで, リストの中で「aが何個, bが何個, ……」というデータを得ることができる. 入力データの中に0はないため, 入力した数字からどれか3つを用いて112, 120, 128, ……のどれかを構成できるかを調べていけば, 計算量が少なくて済む.
1桁, 2桁の場合は別に処理する. これは単に8で割った余りで判断すればよいであろう.
E以降
E以降は私の能力不足故に省略いたします.
参考にしたもの
- 「解説 - AtCoder Beginner Contest 181」
Editorial - AtCoder Beginner Contest 181
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
- ell様による「【Python】リストの要素の数え上げ, collections.Counterの使い方」
【Python】リストの要素の数え上げ, collections.Counterの使い方 - Qiita
はじめに 今回はPythonのcollections.Counter()についてまとめます. AtCoderのPython3.4.3と3.8で動作確認済みです. collections.Counterについて collec...
0 件のコメント:
コメントを投稿 (Please feel free to ask me about your questions! You can use Japanese or English in the comments.)