NF

地方で働くプログラマ

緑コーダーになった日記

fatalerror.hatenablog.com
つづき

念願の緑コーダーになりました。2020年中にという目標を立ててましたが、上のとおり年末まで全然でした。が、ここ数カ月で急にレートが上がって入緑を果たせました。

数学が本当に苦手で、灰色・茶色にそれぞれ1年くらい居ましたが、それでも緑になれるよ、っていうモデルケースになれればいいと思います。まぁここにはイベントの日記ばっか載せてるから勉強してねぇな?って思われそうだけど、一般の人がTwitterやってる時間よりは短いはず…


で、色変記事とか書けない(し競プロ知り合いもいない)ので、ここでそれっぽい事を書いてみる。と思ったけどリアルに関連付けられそうなので学歴とか書けないな。どうせ自分メモだし書けることだけざーっと書く。

参加歴

いわゆる令和ABC後に初めて、70回以上出てます。昨年末はこれ100回やっても無理そう…と思ってたけど何とかなった。あと、去年の今頃にABCの参加者数が増加傾向(1万越え)の時期があって、その頃は潜在緑以上の人がいっぱい増えたのかレートが全然上がらず辛かった。最近は8000人弱くらいで落ち着いてるようで。
 

最近レートが伸びた理由

いわゆる精進量が増えた訳ではないです。むしろ直近は減ってる。多分、本番で苦手っぽい問題に当たった時に躊躇せず飛ばして次に行く、というムーブをするようになったのが大きいです。崖があると詰みますが。あと典型っぽくない方が比較的成績がよいです。これは、同レート帯が自分比で精進してる人が多いので、典型対決になると大体速度で負けちゃう、という負の理由。
 

勉強法

解いた問題量のペースは増えてないです。数学苦手なのもあって解けない時は本当に詰むので、ACできない負債が溜まっていきました。なので、問題解くより本読んだりしてアルゴリズム自体を理解する方針でやってて、結構効果あったように思います。例えばABC198-EはそのままDFSって感じの問題だと思いますが、同色帯で解けてない人が多かった(位置もありますが)ので、DFSの動きが分かってないっていうケースがあったのかも?と思ってます。

ーーー
次の目標は?って言うのが今ないです。水色は厳しいすぎるし。同じ頃始めて凄い精進で上にいった人でも、緑中堅くらいで止まってる人いて厳しい世界だなーと思ってます。
あと、緑になれた達成感が思いのほか大きくて、落ち着いてしまったのがあります。強い人には緑でそれ?とか言われそうですが、始めた頃の実力と自分のスペック的に結構な壁だったので。


茶色で覚えるべきアルゴリズム10選みたいのがまだ結構身に付いてないので、その辺を習得してくことを直近の目標にしようかと思ってます。ちょうど、典型90問というのを作ってくれた人(有名な人らしい)がいるので、連休中はそれをやってます。


ーーー
閑話休題
なんか定数倍の話題を見たので、例のpragma GCCがどれくらい効果あるかちょっと計ってみた。(ABC128-Aで計測)
mapに積和を突っ込むだけのプログラム、n=5000で1,500msくらい、N=6000だとTLE。6000×6000×2(※和と積)が大体10^8弱だから感覚的に合ってる?

    std::map<long long, long long> mp;
    for(long long i=0; i<n; i++){
        for(long long j=0; j<n; j++){
            mp[j] += i*j;
        }
    }

これにpragma付けたら、50-60ms位の改善が見られました。Ofastとunroll-loopsは効果があって、target("avx2")系は色々試したけど効果なかった。浮動小数点を絡めないと効果薄いのか、64bit変数にするとSIMD化がどうこうとかあるのかな?全然分かってません。もうちょっと調べよう。あと、こういうコードとかも読めるようにしよう。

取り合えず以上