もう競プロで Go 書くときは fmt.Scan しない
今年度に入ってから、周りの人達の影響もあって AtCoder をちまちまと始めました。4回のレーティングを経て茶色です。自分の色弱の傾向だと、茶色と緑を見分けるのがかなり難しいので、早く水色になりたいです。
言語は勉強も兼ねてなるべく Go にしてます。ソートしたり文字列処理したり、普通に Golang 書いてるときとは違う知識が要るので、戸惑うことも多かったですが、少しずつ慣れてきてます。特に AtCoder は Go 1.6 なので、ソートがなかなかハードル高かったです。
昨晩は少し時間があったので Codeforces にも参加してみました (Codeforces Round #563)。Problem B がほぼソートするだけだったので、サクッと書いて submit したところ、なんと Time limit exceeded。 sort.Ints
でのソートが遅い?なんで??ってことで色々調べたのですが分からず、結局 C++ で書いて通しました。Wrong answer 2回も出してるのは気にしないでください。
これ以上 Golang で競プロ続けるのは厳しいのかなーとがっかりしてたのですが、ソートじゃなくて入出力が遅かったのでは??と冷静に考え始めました。
本題のソートをせずに問題文(N=100000)を読み込むだけのコードで試したところ、手元の環境で 1.5 秒程度かかってしまいました。よかった、ソートは遅くなかったんだ。
それで何かいい感じに入出力してくれる方法はないかと調べたところ、この記事に行き当たりました。
ここの nextInt()
をありがたく使わせてもらったところ、無事に 0.3 秒程度で解くことができました。これでこれからも Go で競プロ続けられます。
AtCoder にあと1回参加すれば参加回数が5回となって「参加回数が5回に満たないため、推定される実力よりも大幅に低いレーティングとなっています」から脱することができるのですが、週末の ABC 129 は残念ながら Aqours 5th LoveLive! 〜Next SPARKLING!!〜と被ってるので参加できません。また次の機会に参加したいです。