2015-07-28
SRM 653
https://competitiveprogramming.info/topcoder/srm/round/16317/div/1
https://competitiveprogramming.info/topcoder/srm/round/16317/div/2
Div1 Easy (250) CountryGroupHard
問題
- 人々が一列に座っている
- 同郷の人が連続して座る
- 同郷の人の人数を聞いた結果の配列aが与えられる
- a[i]がゼロなら質問しておらず、正なら人数が入っている
- 残りの人に質問しなくても、構成が一意かどうかを求める
方針
- メモ化再帰
- [pos,N)の区間が一意かどうかを返す
- Failed System Test
- ゼロの扱いがバグっていた
- (解き直し)
- [pos,N)の区間が何通り(以上)かを返す。不可能であればゼロを返す。2通り以上あれば2を返す
- 区間内でゼロでない最初の要素を見つける。全部ゼロなら、ゼロの個数を返して終了
- その位置と値でありうるパターンを列挙する(たとえば3の場合、末尾で3のとき、真ん中のとき、先頭のとき)
- 数字が矛盾しない(333や300など)なら、左右の矛盾をチェック
- 左側の判定は左側のゼロが1個以下かどうか
- 右側の判定は再帰
- [0,N)が1かどうかが答え
- https://github.com/firewood/topcoder/blob/master/srm_6xx/srm_653/CountryGroupHard.cpp
結果
x-- +1 50pts 240th/524 rating 1410 -> 1454 (+44)
場合分けの多い再帰を書いてしまった。シンプルに区間[L,R)で書くべき。
コメントを書く
トラックバック - https://topcoder-g-hatena-ne-jp.jag-icpc.org/firewood/20150728
リンク元
- 76 https://topcoder-g-hatena-ne-jp.jag-icpc.org/
- 57 https://www.google.co.jp/
- 34 https://topcoder-g-hatena-ne-jp.jag-icpc.org/
- 14 https://www.google.co.jp
- 13 https://topcoder-g-hatena-ne-jp.jag-icpc.org
- 12 http://t.co/71cbJblEpy
- 7 https://www.google.com/
- 5 https://github.com/
- 3 https://github.com
- 2 https://www.google.com