日記

SRM400〜500のDIV1Hardを読み、77問を解いた

見た問題の表 - antaの競技プログラミング練習日記 解けてないものや、Editorialがないので解法がわからないものなどもあるが、77問は解法を見る見ないにかかわらず自分でコードを書いた。 Hardは新たなテクニックを知ることのできるからいいね。 とりえあず…

約1時間30分間気付かなかったミス

数を長さNで循環シフトさせて、その後の偶奇を知りたかった。 if((x - shift + N) % N % 2 == 0) ... としなければいけないところを if((x - shift) % 2 == 0) ... とかしていた。 当たり前だが、((x mod m) mod n = x mod n)は一般には成り立たない。 例え…

約40分気付かなかったミス

rep(j, a.size()) aa[a[j]] = 1; とすべきところを rep(j, a.size()) aa[j] = 1; としていた。 解法がMaximumFlowであって、そっちがバグってるんじゃないかと思っていたが単純なミスだった。解法・ライブラリ・変な所が間違ってるんじゃないかと思って確認…

SRM400〜594(今まで)のDIV1 Easy,Mediumを埋めた

見た問題の表 - antaの競技プログラミング練習日記 最近練習してなくて惨敗し続けていたのでむしゃくしゃしてやった。 さらにSRM400〜のHardをやろう。

ptrdiffの左右

(p - str)とかしてインデックスを求めることはそれなりにある。 しかしこれ(p - str)を(str - p)としても何の警告も出ない!(もしかしたらstrが配列の時は何かあるかも?) (node - nodes)とか紛らわしい名前を使っていると、(nodes - node)としてしまっても…

自分のSRM振り返り(雑多)

非常に雑多かつ自分用です。 TopCoderというものを知る 2011/05/23 TopCoder部のカレンダーを見ていた。 2011/05/27、 ttp://d.hatena.ne.jp/cou929_la/20091005/1254725798 を見ていた。 2011/06/22 にはTopCoderのArenaをダウンロードしていた。 Practice…

SRM200〜300のDIV1Hardを見終わった

だいぶ解くことから逃げた問題もあるが、そのうち89問を一応(所見/解答見て)提出できたようだ。 一応http://d.hatena.ne.jp/anta1/20121209の時からやっているので、3ヶ月弱かかってしまったことになる。 問題数で割ったら1日1問とかそんな感じで、サボりま…

https://github.com/anta-/kawigi-tekito- を更新した

https://github.com/anta-/kawigi-tekito-

SRM Easy,Medium 200番まで見た

SRM、DIV1のEasy,Mediumを(抜けはあるが)200番まで見終わった (見た問題の表)。 SRM200番台のMediumの難易度と今のEasyの難易度同じくらいじゃね?というほどに、今のSRMは昔と比べて難しくなっている気がする。 これからは200番台から昇順に、Hardを解いて…

初めて少しJavaいじってみた

TopCoder Arena pluginのKawigiEditをいじってみた。 よくわかんないけど取りあえず動くようにはできた。 色々よくわかってない。 eclipse使ってみたけどよくわかってない。 https://github.com/anta-/kawigi-tekito- Unused Code Cleanerは使うことにした。…

TopCoderのunused code ruleってどうなんだろ

http://community.topcoder.com/tc?module=Static&d1=help&d2=ratedEvent#extracoderuleには、#include以外で、300文字、30%以上だとだめだと書いてある。 これはテンプレートを使うには、特に問題自体のコードが少ない場合、非常に厳しい。 Googleで検索し…

二分探索・三分探索・適当に分割する

三分探索は、ある1つ以下の点で傾きの正負が入れ替わる場合に、その点(最小値/最大値)を求めるアルゴリズム。 また、その分割を黄金比にすると多少効率がよくなるらしい。 たまに想定解でなくてもこれで解ける時があると思う。 二分探索は、ある1つ以下の点…

オーバーフローミス多すぎ

もう、速度の問題とかオーバーロードの問題とか無い時は、基本的にはlong longを使うようにする。 そのためにテンプレートのtypedefを変えてみた。 ついでにvectorもいれてみた 旧 typedef long long ll; typedef vector<int> vi; typedef pair<int,int> pii; typedef vect</int,int></int>…

「順番変えて同じものは同じものとして、その重複なしで」という問題

は、「すべてのi

バイナリ法は

半群なら使えるんじゃね。 でも行列の掛け算が半群になるためには半環とか必要そうな気がするけどどうだろ?

bfs力が足りない…!

今、bfs力が非常に足りない。問題を見てbfsだとわからないし、書けない。それを直そう。 とりあえず色々列挙してみる。 状態の管理には、queueを使う。イテレーションが少ない時には、配列でヘッドとテイルのポインタやインデクスを持つ形にしてもいい。 cur…

行列累乗力が足りない…!

行列累乗がよくわからない。どうしたらその遷移行列を見つけられるのか? とりあえず制約からヒントを得よう。 n k nはアルファベットの数など、見えにくい形のものも多い。 そもそも行列の掛け算とは、 C_ij = Σk (A_ik B_kj)というシンプルな形。 新しい状…

DP?メモリ削減テクニック

今やっていた、SRM 430 DIV1 Medium TwinTowns。 このrng_58さんの解答を参考に書いた下のコード。 typedef long long ll; typedef vector<int> vi; typedef pair<int,int> pii; typedef vector<pii> vpii; const int INF = 0x3f3f3f3f; const ll INFL = 0x3f3f3f3f3f3f3f3fLL; </pii></int,int></int>…

変数のshadowing

頻繁にやってしまう。警告も何も出ない。 そして意味不明なバグとなって混乱させる。 また、今回はたまたまExample通ったからFailedした。 g++に-Wshadowというオプションがあるようだ。これと-Werrorつけてやるか

bitsetの罠

※TopCoderの環境の場合。C++0xだとlonglongのコンストラクタがあるらしい bitsetで気軽に2進表示とかよくやる。 でもbitsetはintしか対応してない?らしく、long longを使うと何の警告も無しに切り詰められちゃう。 さらに悪いことに、gccのバージョンによっ…

doubleなのにintにいれちゃう

vpii v; //... v.pb(mp(hypot(xi - xj, yi - yj), j)); 的なことをやってしまった。 double直接でなく、pairのvectorというのがわかりにくくしていたか。 警告は出てたが無視してしまった。 警告は無視するな!

最近SRMさぼりすぎ

はい。 coqとかやってる。 やらないとしょうがないでしょ

戦略の評価が要素になるDP

DPは最終的な評価のみが要素になるわけじゃない。 最小化したかったりしたいものが有ればそれがDPになる。 逆に、最終的な評価などをインデックスにできる。 最後には全部とかを舐めて、Validであるインデックスのmaxを取ったりすれば良い SRM 451 DIV1 Medi…

しっかり考えよう

練習でも、 問題を読む 制約を見る 〜10: O(n!) 15〜20: O(2^n) 30〜40: O(2^(n/2)) 50: O(n^4)程度, DP, グラフ 〜10^14: O(√n) 考えて 適当に分割してみる サブ問題に再帰的に分割できる? 小さな場合を制約式のようなものに展開する 一旦考えなおす さら…

不等式の場合、それは順序関係で、 順序関係で有向グラフにするという考え方はありだ。 循環があるかの判定(dfs/bfsでおk)で矛盾があるかが判定できる 矛盾がない場合それはDAGということなので、DAGとして色々考えられる グラフにしよう

データ構造はまずはそれを使う!という問題や、それの頻出の使いかたの問題をやるべきか。 SRMではそういう問題はあまり出ないと思うから、他のところか。 そして使える時に使えるようにならなければいけない。 例えばRangeMinimumQueryはDPの加速に使えるが…

感動すること重要

モチベ重要 回答に感動すること・さらには自分の(回答・アイデア)に感動することは非常にモチベになる

操作が複雑なとき

ステップに分け、それぞれのステップごとを関数にする。 逆関数などを求めたかったら、それぞれについて考え、それを合成する

メモ化を忘れる

酷いミス。確認しろ 本当に

練習記録の方針

タイトルは、SRMの場合"SRM 123 DIV1 Medium ProblemName"のように書く 一番上に、元の問題文が読めるページへのリンクを置く "問題"小見出しに、問題の概要を書く "回答"小見出しに、自分の考えたこと・考え方を書く "コメント"小見出しに、雑多な、反省点…