cafelier のSRM参加記録です。コンテスト中に考えてたことを執拗に全部書き残すとどうなるだろうかという試み本番中にこういうコードが書きたかったなあ、という後で書いた反省コードを書き残す試み
スパムが来たのでしばらくコメント欄をはてなユーザ限定にしています、すみません、
あとで | |
他の方の参戦記を参考に解いた。そうか、半分にわければ2^18は全通り試せるのか。なるほどなあ。尺取りメソッドというのは毎回二分探索するかわりに左と右から少しずつずらしていけばO(NlogN)がO(N)で済むという手のことかな。
あとこれ、人数合わせる制約なしの一般のPARTITIONにも O(N 2^(N/2)) くらいで使えるなー。勉強になった
その他 | |
TZTesterというプラグインを使っててだいぶ不満がたまってきたので適当に改造。
改造してから id:nitoyonさんの の存在に気づいた!うわあああああああこれをそのまま使えばよかったー
※2009/05/20 : nitoyonさんのテストコード生成を参考にして大幅修正&&naoya_tさんのtimer,double誤差チェックを取り入れてみたバージョン、というか今使ってるもの → jar とソースはこちら
int Test_(Case_<0>) { int dayLength = 4; int yearLength = 1461; int RetVal = 4; return verify_case(RetVal, DesignCalendar().shortestPeriod(dayLength, yearLength)); } int Test_(Case_<1>) { int dayLength = 86400; int yearLength = 31558150; int RetVal = 1728; return verify_case(RetVal, DesignCalendar().shortestPeriod(dayLength, yearLength)); }
こういうテストコードが出ます。さらに Test_(Case_<2>) という関数を定義したらテストランナーが勝手に呼び出す雰囲気
あとで | |
埋め込んでない埋め込んでないよ!(ということにしておく)
O(n * 3^n) の NegaMax を無理矢理押し通した。最悪ケース "XXXXXXXXXXXXXXXX" で 1.85s。
これが想定解と言うことはないと思うので解説待ち…
presented by cafelier/k.inaba under