問題文の通りに書くだけ。自明なこととして、同じサイズの円が二つ以上あったらそれらは無視してよい。(勝つ運命にあるほうが相手と同じ動きをすればよい)奇数個で構成される円は片方が適当に分割しても、もう一方が残った円のうち大きいほうを少ないほうの円ともう一つの円に分割することで奇数個の円を残すことができるので、結局は1の円と同じであり、無視してよい。数個で構成される円は片方が半分に割ることで1ターン分稼げるので、偶数個の円が来るたびに勝者が変わる。典型っちゃ典型なのかもしれない。queueを使うと楽。感想C問題にしてはかなり簡単な気がする。巡回セールスマンっぽいが、もちろんサイズ的にそんなわけはない。dp[今いる場所][右隣に移動する回数]というようなdpをもってやれば解ける。スタート位置とゴール位置によって往復するかどうかが一部変化するので実装がややこしい。解法がわからず、editorialとか他の人のコードを読んで理解した。コードを読み込みすぎた結果、ほとんど覚えてしまったので自分で実装したと言えるのかは怪しい。括弧に閉じられている論理式を頂点をみなし、絶対値が同じ数を含んでいる頂点同紙に辺を張ると、問題文より、一つの頂点からは最大でも二本しか辺が張られないため、パスもしくは閉路のみが残る。パスや閉路についてはそれぞれ独立にdpを用いることで真偽それぞれの場合の数を求めることができるので、あとはそれらをまとめるdpをすればよい。前に諦めてeditorialを読んで理解はしたものの、実装辛そうだったから敬遠していたが、実装できてよかった。検索はてなブログをはじめよう!gasinさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。