![見出し画像](https://assets.st-note.com/production/uploads/images/36907972/rectangle_large_type_2_5b84fe1a0de0343315537b3f1e277aa7.png?width=1200)
ABC180の感想
AtCoder Beginner Contest 180に参加しました。問題はこちらから。
結果はこちら。
4790 / 5748 パフォーマンス126でした。
なんか散々な有様でした。b問題の有効数字が合わなくて、結局pythonで書いたり、c問題はなんか計算時間が間に合わなかったり。なんででしょう?
とりあえず、ふりかえりをば。
a問題は n 個のものが入っている箱から、a個除き、b個追加する問題です。一行で終わりですね。
b問題は n 個の1次元座標が与えられて、マンハッタン距離、ユークリッド距離、チェビシェフ距離を求める問題です。計算のやり方も書いてあり、高速かも求められない問題ですので、簡単だと思ってました。ユークリッド距離だけルートの計算があるので、それをC++で書いたところ、なんか桁数が合わないんですよね。sqrt関数の出力って double ですよね。浮動小数の理解が足りてないのかな。結局、pythonでかいて、その辺の理解は後回しにしました。「こういう点においてpythonは素晴らしいと思いますが、言語を学ぶ上でどうなんだろうって思うところはありますね。」って私の担当教授の方はよく言ってました。私もそう思います。でも便利です。
c問題は約数を列挙する問題。愚直にやりつつも、約数の相方を一緒に求めてやれば早くなるって実装をしたのですが、永遠にTLEが取れませんでした。試験後に、ほかの方の解答を見ても同じようにやって通ってるのに、、、何が違うのか今から探す旅に出ます。
以降の問題は見ていませんが、順位表を見る限り今までよりも幾分か簡単だったのかなと。挑戦したかったですね。
パフォーマンス1000達成はいつになることやら。
以下追記です。
Bはsqrtの問題ではなく、coutのほうの制限に引っかかってました。
cout << setprecision(9) << fixed;
で解決。
Cは
for(int i = 1; i*i<=n; ++i)
としてましたが、i * i が int に収まらない分をキャストしてくれていました。それに時間を取られてしまっていたようです。
for(long long i = 1; i*i <= n; ++i)
で通りました。
いつだって、プログラムはちゃんと動くように頑張ってくれてるんですね。私の知識やら実力不足でした。
でもまさか、プログラミングを習ってから常々呪文のように書いていた
for(int i = 0)
に原因があるなんて思いもしませんでした。とってもよい経験となりました。
この記事が気に入ったらサポートをしてみませんか?