[Contest] 2010 AUT ACM-ICPC Local Contest
- チームで出るということになってたので大学に集合。
- みんなどこにいるんだろ?とりあえずコーチの部屋に行ってみる。
- 「『今日は台風が近づいてるから個人戦』ってメールしたよ?」
- え。そんなメール届いてない・・・。
- コーチのメールを確認させてもらったけど、宛先は間違ってない。でもやっぱり届いてない。
- なんで?
- コーチのメールを確認させてもらったけど、宛先は間違ってない。でもやっぱり届いてない。
- そんなわけで個人戦。
Problem A: Abnormal 89's
- 御飯食べて問題印刷して読みつつスコアボードを見る。
- 早くもACしてる人がちらほら。簡単なのかな。
- N = 200,000
- え?どうすんの?
- 頭 1, 2, 3, ..., N 文字が回文であることをまとめて O(N) で判定できればいいのだけど・・・。
- うーん。どうやるんだろう。分からん・・・。
- ...
- 根本的に方針を変えてみよう。
- とりあえず反転したものを並べて書いてみる。
- "abacc" "ccaba"
- ...ぺかーん!
- 反転して k 文字巡回シフトしたものと一致したら alindrome!
- いやまて、それだと palindrome も alindrome にならないか?
- 1 <= k < n に限ればそんなことはないっぽい。
- って、そもそも k を全通り試してたら O(N2) だ。
- ...ぺかーん!ローリングハッシュが使える!
- 実装!
- ...ぺかーん!ローリングハッシュが使える!
- いやまて、それだと palindrome も alindrome にならないか?
- 書けた。unsigned long long であるべきところが int になっててしばらくはまった。
- submit. Wrong Answer.
- なんだろう。とりあえずスペルは合ってるっぽい。
- もしかしてこの解法嘘?
- (a+b).reverse == b.reverse + a.reverse なのでそんなことはないはず。
- 超絶運が悪くてハッシュが衝突してる?
- とりあえずハッシュの係数を変えてみる。さすがにこれだけではsubmitしないけど。
- うーん。他に怪しいところはないだろうか。
- ...
- って、スペル間違ってる!
- 「とりあえずスペルは合ってるっぽい」とか言ってるバカをお仕置きしたい。
- Accepted. これはひどい。
Problem B: Benefit
Problem E: EnimEN
Problem G: Genius MJ
- xyでソートするだけ。簡単。
- complex<int>を使うと90度回転が簡単だった。
- Accepted.
Problem C: Calculus Simplified
- O(N!) にしか見えないけど、N の上限が書いてない・・・。
- ...あれ?
- どう見てもこの式って簡略化すると (x+x+...+x) - (x+x+...+x) の形に落ちるよね。
- greedyに割り当ててくだけだ。O(N) で大丈夫。
- どう見てもこの式って簡略化すると (x+x+...+x) - (x+x+...+x) の形に落ちるよね。
- 構文解析書いた。submit.
- 運良く一発で Accepted.
- 疲れてきたのでこの辺でコーヒーを買いにいったりとか。
- 適当に選んだ缶コーヒーが人口甘味料入りだったのでちょっとしょんぼり。
Problem F: Fabulous DAGy
- ややこしい問題だ・・・。
- DAGに追加された辺がどれだったかを仮定してループを探す。
- u - v の辺が追加されたとしたなら、それを除いたグラフに v - (全ノード) - u のパスがないと最大サイクルにならない。
- DAGなので、DPでもすれば O(V+E) ぐらいで探せるよね。
- って、これだと O(E2) だ。どうしよう。
- DAGなので、DPでもすれば O(V+E) ぐらいで探せるよね。
- u - v の辺が追加されたとしたなら、それを除いたグラフに v - (全ノード) - u のパスがないと最大サイクルにならない。
- O(VE) ぐらいならギリギリ間に合うと信じてみる。
- v - (全ノード) - u のパスをもっと速く探したい。
- ...
- ...できないなぁ。
- もしかして、追加された辺の候補を減らすほうが簡単?
- 追加されたのは 1 本なのだから、何でも良いから閉路を 1 つ持ってきて、それに含まれる辺だけ調べればいい気がする。
- これで候補が O(V) 個に減る。
- 閉路の検出は・・・ V 回DFSしても O(VE) なので大丈夫だよね。
- 追加されたのは 1 本なのだから、何でも良いから閉路を 1 つ持ってきて、それに含まれる辺だけ調べればいい気がする。
- v - (全ノード) - u のパスをもっと速く探したい。
- 集中力が切れたので、1時間ぐらいかけてだらだらと実装する。書けた。
- DPとかしなくても、トポロジカルソートすれば簡単に見つかるよね。
- どちらにしても閉路がないことは確認しなければいけないし。
- DPとかしなくても、トポロジカルソートすれば簡単に見つかるよね。
- submit. TLE.
- あ、辺の候補はもっと速く見つけられそう。
- DFSをかけて閉路が見つからなかったら、そのとき辿ったノードは絶対閉路に含まれない・・・よね?
- submit. TLE.
- うーん。致命的に遅くはないはずだけどなぁ。
- 手元で最大ケースを100回回す。4秒。ジャッジデータは40ケース。ギリギリだなぁ。
- それにしても最大ケースの入力ファイルでかいな。
- scanfも捨てて、自分でもっと速い入力を書いたほうが良いのかも。
- とはいえ残り3分なのであきらめた。
- 5完で14位。
- うーん。こんなものかな。