差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン両方とも次のリビジョン
programming_algorithm:contest_history:atcoder:2019:0504_agc033 [2019/05/10] ikatakosprogramming_algorithm:contest_history:atcoder:2019:0504_agc033 [2019/05/10] – [解法] ikatakos
行 134: 行 134:
 ===説明のための特殊化=== ===説明のための特殊化===
  
-'R'と'B'を全て逆転して考えても答えは変わらないので、$S$ が'B'から始まる場合は逆転させて、'R' から始まるとして説明する。+'R'と'B'を全て逆転して考えても答えは変わらないので、$S$ が'B'から始まる場合は逆転させて、全て 'R' から始まるとして説明する。
  
 ===制約=== ===制約===
行 149: 行 149:
 <WRAP center round box> <WRAP center round box>
 ここで、$S$ が全て'R'だった場合、1.の条件さえ満たせばよい。 ここで、$S$ が全て'R'だった場合、1.の条件さえ満たせばよい。
-この場合の数え上げは、フィボナッチ数列のようにしてできる。+この場合の数え上げは、フィボナッチ数列のようにしてできる。直線上で考え、先頭と末尾がともに青にならないように注意する。
  
                     長さ      2    3    4    5    6                     長さ      2    3    4    5    6
行 184: 行 184:
   * 奇数個だった場合、奇数番号の点から出発するケース   * 奇数個だった場合、奇数番号の点から出発するケース
  
-では、移動後に存在できるのが偶数番号の点であり、どうやっても1や3といった赤と青の境界に存在できない。+では、移動後に存在できるのが偶数番号の点となり、どうやっても奇数番号の赤と青の境界に存在できない。
  
 $K$ が奇数個なら左右端で偶奇を選べるので、どの点から出発しても青に移行できる。 $K$ が奇数個なら左右端で偶奇を選べるので、どの点から出発しても青に移行できる。
行 211: 行 211:
 ^連続できる赤|1|3|3|5|5|7|7|...|k/2*2+1| ^連続できる赤|1|3|3|5|5|7|7|...|k/2*2+1|
  
-また、2番目の条件「...→青→奇数個の赤→青→...」は、先ほどの偶奇を考えると、赤を端から端まで貫通する必要がある。+また、2番目の条件「...→青→奇数個の赤→青→...」の移動は、先ほどの偶奇を考えると、赤を端から端まで貫通する必要がある。
  
 'R'が偶数個なら入った端点と出る端点が同じなので引き返せばいいのだが、奇数個なら入端点と出端点は異なり、貫通が必要になる。 'R'が偶数個なら入った端点と出る端点が同じなので引き返せばいいのだが、奇数個なら入端点と出端点は異なり、貫通が必要になる。
行 219: 行 219:
   →→,             →→→→→→→   →→,             →→→→→→→
   ←←'   ←←'
-    +
 じゃあ、そういう、赤が長く連続する箇所を避けるように選択して移動できないかというと、無理。 じゃあ、そういう、赤が長く連続する箇所を避けるように選択して移動できないかというと、無理。
  
-実はあんまり移動の自由度がなくて、'R','B'が連続する個数と入端点によって、出られる端点は一意に決まるので、+実はあんまり移動の自由度がなくて、'R','B'が連続する個数の偶奇と入端点によって、出られる端点は一意に決まるので、
 出発点を決定した時点で、「$i$ 回目の移動後には、この連続する赤/青の区間のどこかに存在する」というのが決まってしまう。 出発点を決定した時点で、「$i$ 回目の移動後には、この連続する赤/青の区間のどこかに存在する」というのが決まってしまう。
  
行 236: 行 236:
                    ------     5ではこの上のどこかにいて、右端から出る                    ------     5ではこの上のどこかにいて、右端から出る
  
-赤が連続する区間は、どこかからの出発点で必ず通られる。+全ての赤が連続する区間は、どこかからの出発点で必ず通られる。
  
 よって、円周上で赤が連続する箇所は全て、$S$ 上で'B'に挟まれた最も短い奇数個の'R'の個数を超えてはならない。 よって、円周上で赤が連続する箇所は全て、$S$ 上で'B'に挟まれた最も短い奇数個の'R'の個数を超えてはならない。
行 288: 行 288:
 $dp[N]$ まで埋めたら、回転のバリエーションを考える。本問題では、回転して同じになるものは区別する。 $dp[N]$ まで埋めたら、回転のバリエーションを考える。本問題では、回転して同じになるものは区別する。
  
-単純に直線を円周に当てはめる位置を $N$ 通りずらすので、$dp[N]$ を $N$ 倍すればよいなんてことにはならず、+単純に直線を円周に当てはめる位置を $N$ 通りずらすので、$dp[N]$ を $N$ 倍すればよい...なんてことにはならず、
 例えば「赤赤赤青赤赤赤青」などは半回転した結果が全く同じになるので、重複してしまう。 例えば「赤赤赤青赤赤赤青」などは半回転した結果が全く同じになるので、重複してしまう。
  
programming_algorithm/contest_history/atcoder/2019/0504_agc033.txt · 最終更新: 2019/05/10 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0