kyos1704活動記

適当に考えたことや調べたことを垂れ流すものです。質問等ありましたらtwitter:@kyos1704 に質問してください。

今までの競技プログラミング生活を振り返って

この記事は
Competitive Programming Advent Calendar Div2013
http://partake.in/events/3a3bb090-1390-4b2a-b38b-4273bea4cc83
のために書かれた記事です

競技プログラミングを初めて2年ほどたったので、備忘録代わりに書こうと思います。

そもそも競技プログラミングをはじめる前

大学に入る前、私は全寮制の学校に通っており。そこはPCの持ち込みは禁止だったので、実家に帰った時etcにちょっとHSPという言語に触っていろいろいじって遊んでいました。
起動したらPC最起動させなきゃならないプログラムとか(オイ。

はじまり(2011)

大学に入ってしばらく、たしか6月ごろにICPCチャレンジ部の先輩と、別の部活の部室に押し入っていた時に誘われました(なお私はその別の部活に入ってもいないのにそこでボードゲームしてました。謎です)

面白そうだったので、毎週火曜日だった活動日に遊びに行ったらいきなりRedAndBlackを解かされました。大学にはいるまでプログラミングはほぼしていなかったので、とけるわけもなくあとで解けるようになりたいなあとか思っていました。

アジア地区予選のスタッフをする

アジア地区予選がたまたま私の大学で行われたので、スタッフとして駆りだされました。(喜んで参加してました念の為) Linuxに触ったこともなく、よくわかってもいなかったので、周りの会話にもついていけず、スタッフとしてした仕事はトイレ案内ぐらいでした。その時、競技プログラミングの怖い人たちが楽しそうに問題を解いているのを見て、すごく羨ましくなりました。
来年以降この場にたちたいなあと思いました。

スタッフの仕事をした後

RedandBlackを解きます。アルゴリズムを使ってるっぽい問題を解くのは初めてだったので達成感がありました。
しかしその後しばらく何もしませんでした。

2012の国内予選に参加する

ICPCチャレンジ部の先輩2名と国内予選に参加しました。climpetさんがさっさと3問解いてくれたのでアジアにいけることになりました。私は問題を読んで座っているだけでした(一応いろいろ考えたりはしていましたが、役には立ちませんでした)
アジア地区予選にいけることになったのはいいのですが、まだ問題を全然解いていないのでアジア地区予選までに100問は解こうと目標を立てます。

アジア地区予選に参加する

アジア地区予選に参加しました。(・・・・・・実はこの時にまだDP全然かけなかったし、ダイクストラもかけなかったとか言ってはいけない)

やっぱり役に立たなかったよ・・・・・
かと思いきや、UF木を使う問題に関して方針があっていたのでこっそり自信はつきました。(なお実装できる人がいなかった模様)
アジア地区予選が終わった後帰って実装してAC取れたので、初めてちゃんと難しい問題を自力で解けたと実感しました。

いろんな人とおしゃべりしたりしてとても楽しかったです。
やっぱりオンサイトはよいです。オフ会として。

立命館合宿(2013)に参加する

立命館合宿に参加しました
http://kyos1704.hatenablog.com/entry/2013/03/11/224518
一日目しかブログ書きませんでした。

この合宿で問題リストリンクが作成されました。
http://kyos1704.hatenablog.com/entry/2013/03/11/230540
追加してほしいリスト募集してます。


この合宿でnotさんを師匠に定めました。幾何できません。

この合宿が終わった段階ぐらいで後輩がアジアにいけるようになるにはどうすればいいか?ということを考え出します。
うまく行っているかはわかりませんが、一個したは同じ時期の私よりはアルゴリズムわかっているはずです(オイ

2013国内予選に参加する

後輩2名と参加しました。3完でした。私がD問題に苦しめられている間にclimpetさんが国内予選突破してました。こわい。
というかあのD問題バグ死したのは許されない・・・・

こないだから今

モチベーションが下がっていました(過去形)。原因をいうと、ICPCのsolvedを増やすという点において、次の段階は幾何になると思っていたのですが、幾何こわい・・・
後輩が幾何をするそうなのでABCDsolverになることにしました。
問題解決したのでモチベーションが上がりました。

なおHAL研のプロコンに参加したら幾何でした。がんばります(涙目


今後について

来年の国内予選でアジアに行く事。
マラソンをそこそこできるようになること。

英語できるようになること(競技プログラミング違う




以上です 長々と読んで下さった方はありがとうございました!

学校の実習について

アセンブラでOS作成して そのあと個別にそのOSで動くソフトを作るっていう実習が終わった


主にチームに恵まれていて、役割分担したあと和気あいあいと、ちょこちょこわからないとこはおしゃべりしながら解決してって感じでOS作成はすごくスムーズにいった。(重大なバグを出したのは主に自分だったし、原因は一文字タイポしてたせいだったから非常に申し訳なかった)


OS作成のあとのソフトを作るのは個々人で取り組む感じだったのだけど、同じ課題を選択してる他のチームの人とあーでもないこーでもないとしゃべるのは楽しかった。なんか多分実習時間の半分ぐらい他の人と喋ってた気がする。


私がとりくんだのは電卓だったのだけど、一行の式を入力したらそれを計算する感じの仕様にしていて、競技プログラミング的な感じで処理できたのはわりとよかったかなーと感じた。

競技プログラミング的な感じになるまで仕様を分割することができれば、あとはいつもどおりに実装するだけになるのでいい感じ。


思えばちゃんと完成!って感じになるまで一つの作品に取り組んだのははじめてになるので、今までできないなーって思って途中でやめちゃってる奴は、単純に時間のかけかたが足りない(というか時間の見積もりが甘かった)のかなーって思ったので、ちゃんと時間を確保してなにか作るのをまたしようと思う

Rのインストールについて

wiki(http://www.okada.jp.org/RWiki/?R%20%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB#pbac840c)を見ると
筑波大学のミラーを利用しましょうとか書いてあるのだけど

標準で入ってるっぽくて普通に
sudo apt-get install r-base
sudo apt-get install r-cran-*
でいけた

AOJgetter の作成

https://github.com/kyos1704/AOJgetter

こんなものを作っている(まだREADMEすらまじめに書いてない)

AOJのAPIrubyでたたいてクラスを返してくれるgem的なものを作ろうとしている

使い方とかはそのうちちゃんとREADMEに書きます


そもそもUserSearchしかたたけないからあれですね

CとC++の規格についてぼんやりと

なんとなくでまとめておくので間違ってたら教えてください

CとC++は一種類じゃなくて何種類か規格が存在しているので、同じコードでも規格によって動いたり動かなかったりする

C

K&R 1978年
C89 1990年
C99 1999年
C11 2011年

C++

標準規格
c++98 1998年
c++03 2003年
c++TR1 2007年
c++11 2011年

違っても動いたり動かなかったりするので規格確認とかコンパイラを確認したりは大事かもしれない

構造体の生成について-構造体をvectorに入れたりするときの書き方とか

ダイクストラとかを書くときにコンストラクタ付きの構造体を書いて、vectorに突っ込むみたいなことを良くしていて、

struct S{
  S(){}
  S(int a,int b){
    x=a;y=b;
  }
  int x,y;
};
int main(){
  vector<S> tmp;
  tmp.push_back(S(1,2));
}

みたいなことを良くしていたのだが、さすがに冗長なのでどうにかできないかなと思っていた

struct S{
  int x,y;
};

int main(){
  vector<S> tmp;
  tmp.push_back((S){1,2});
}

でよさそう。
ちなみに

  S a = {1,2};

で初期化できたりする。


ついでに教えてもらったこと

連番でvectorに突っ込む std::iotaとか
コンストラクタがあるやつをvectorに追加するときには
vec.emplace_back(a,b,c...)みたいなこともできるらしい