SRM参加記録など雑記です。社会人になってから競技プログラミングを始めました。どこまで行けるか分かりませんが合間を見つけてアルゴリズムの勉強をしています。無効パターン:上記で挙げたもの全部問題なさそう提出かなり入念に確認したので結構遅くなった・・・でもコーナーケースが怪しそうな回はそれで良いと思う。(本当は怪しげなコーナーケースが出てこない書き方をするのが最も良いと思いますが・・・)チャレンジフェーズ上に挙げたテストケースで、サンプルに含まれない2→0のパターンが最も怪しそうだと睨んだこの場合に1が登場する場合と同様に最後に2を掛けている人がいそうだ実際いた確認中に誰かに落とされる気づいたらそんな人はみんな落とされていた。Statementコーディングフェーズ相変わらず500は難しいまず511=(2^9)-1=111111111(2進数)ということで、最終的に9つのビットが全て立てば負けということかor演算なので一度立ったビットが戻ることはない。20分くらい時間を使ってしまった。Attemptのような気がする。考えると、ある状態のときに、使っても状態が変化しないカードは区別する必要がないな(例えば2進数11のとき、01や10や11を使っても状態は変わらないので、全て同じカードと見做せる)逆にある状態のときに、使うと状態が変わるカード集合は一意に定まるのではうむ。いうことは、状態が2^9で、さらに使っても状態が変わらないカード数が最大50枚のはずなので、512*50=250000くらいの状態数に落とせる。直した間違いないよね・・・(←コードだけ確認して、コーナーケーステストを怠っていた)提出システムテストチャレンジされなかったのでいけると思いきやあっさり落ちた後で0のカードは最初から常に状態を変化させないカードとして計上しないといけないのに、無視していた。コーナーケース何も考えてなかった。猛省すべき点だ・・・ある状態から別の状態に遷移するとき、各ビットごとに、まだ立っていないビットに対して、そのビットを立てることのできるカード集合を管理していた。遷移するとき、各ビットのカード集合の中で状態を変化させられなくなるものだけ数えておけば良いと思ったが間違いで、別のビットを立てるカードも数えないといけなかった。01と10と11の3つがあり、現状態が0とすると、1ビット目集合が{01,11}、2ビット目集合が{10,11}としており、1ビット目に着目して11を使用したときに、状態を変化させなくなるカードは01だけかと思った。実際には10も状態を変化させなくなるため計上漏れが発生していた。これははっきり言って気付けそうにもない。無駄にビットごとに管理などという結果的に意味のないことをしたのが誤りなんだろうが・・・なるべくシンプルに書くように注意することくらいしかできないのかな。OpenTipsDiv1SRM455SRM456SRM457SRM466SRM467SRM468SRM469SRM470SRM471SRM473SRM474SRM475SRM476SRM477SRM478SRM479SRM480SRM481SRM482SRM483SRM484SRM485SRM486SRM487SRM488SRM489SRM490SRM491SRM492SRM493SRM494SRM495SRM496SRM497SRM498SRM499SRM500SRM502SRM503SRM505SRM504.5SRM506SRM507SRM508SRM510SRM511SRM512SRM513SRM514SRM515SRM516SRM517SRM518SRM519SRM520SRM521SRM522SRM523SRM524SRM525SRM526SRM527SRM526.5SRM528SRM529SRM530SRM531SRM532SRM533SRM534SRM535SRM536SRM537SRM538SRM540SRM541SRM543カウンター357932リンク集SigmarのProfile。