AtCorderに初めて参加した!!

あんまり人に読ませる文章ではないです。

感想: 楽しかった!!!

前職はプログラミングコンテストが盛んな会社だった。黄色とか大会での優勝経験がある人とかが何人もいて、みんなすごいなーと思いつつ、自分の仕事はアルゴリズムがそれほど陽に出てこなかったし、しかも非情報系から未経験でエンジニアになった事もあって他に勉強する事が山ほどあったからちょっと遠くから見ている感じになっていた。あと、正直アルゴリズムを学ぶという事の意味がよく分からなかったというのもある。アルゴリズムを見てるとよく思いつくなーと思いつつ自分が思いつけるだろうか?みたいな悩みがあった。僕は物理学がすごく好きで、なぜかというと運動方程式マクスウェル方程式みたいな少数の知識だけで多くの問題を解けるからだ。それはシンプルで綺麗という個人的な美的感覚にあってたのもあるし、記憶力や発想力がそれほど無くてもできるから自分に合っていたというのもある。それに比べるとアルゴリズムはなんとなく場当たり的な発想のように見える部分が多かった。結局最初に勉強した時はソートアルゴリズムとかグラフアルゴリズムみたいなのの教科書的な話に一通り目を通して終わってしまった。

アルゴリズムに興味を持ったきっかけは数年前に買って以来ずっと本棚に眠っていた「アルゴリズムイントロダクション」を一ヶ月ほど前に読んだ時だった。分割統治法の説明の中で出てきたマスター法による計算時間の見積もりのところがすごく面白かった。それまで分割統治法が使えるかをケースバイケースでやっていたのが、ある程度一般化された数学で考えられる事を知った。あとは動的計画法や貪欲法が適用できるかに関する考察も面白かった。こういう知識をうまく自分の中で整理できたら自分でもアルゴリズムを設計できるかなって思って、なのでアルゴリズム設計の指針についていろいろ仮説を立てて、どういう手法を使えば良いか分からない実際の問題で試して仮説を検証してみたいなと思った。

そういう訳でAtCoderの問題を挑戦しようという感じで「AtCoder Beginner Contest 174」に挑戦してみた。一応過去問をいくつかは解いてて、D~Fで一問解けるかなぐらいにはなってきたので4問答えるのを目標にした。結果としてはABDの三問解けた。C難しかった...Eは解けるようになりたいなー...

Aはまあプログラミング慣れてる人ならすぐだと思う。Bは分子シミュレーションの研究していた頃に100億回ぐらい書いたので一瞬だった。Cはなんていうか、整数から逃げ続けたツケという感じがする。試験中に鳩の巣原理で2と5が無ければ11111...はKで割れるのを証明できるのを知ってすげーって思ったけどデカい数字を割るのが良くなくてTLEになってしまった。最近だとmodは高校で習うんだろうか?数学オリンピックとかだと普通に出てくるから国際的には習うもんなのかな?僕は結局大学含めて出会う事なく学生時代を終えてしまいました。次は間違えないようにする。Dはなんか実験してこれで行けそうかなって感じでやったら行けた。解けたのはいいけどなんか思いつきに頼ってしまった感じで良くない...。Eは簡単そうに見えて全然思いつかなかった。解説読んで二分探索なるほどねーってなった。なんかうまく考え方の中に組み込めそうな気がするからあとでしっかりめに考察する。Fはなんかこの前セグメント木作ったからそのまま使えそうならやってみるかという感じだったけどなんかうまくできなかった。慣れない事するもんじゃない。解説眺めた感じセグメント木ですらなさそう。

という事で初挑戦は700点でした。難しかったけどやっぱこういうのは勉強した事をゲーム感覚で試せていいなって思った。次は4問解きたい。