差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン両方とも次のリビジョン
programming_algorithm:contest_history:atcoder:2019:0323_agc032 [2019/04/19] ikatakosprogramming_algorithm:contest_history:atcoder:2019:0323_agc032 [2019/04/19] ikatakos
行 14: 行 14:
  
   * 数列 b1,b2,...,bNb1,b2,...,bN がある   * 数列 b1,b2,...,bNb1,b2,...,bN がある
-  * 空のaa に以下の操作を NN 回繰り返して bb と同じにできるか判定し、可能なら操作手順を示せ+  * 空のaa に以下の操作を NN 回繰り返して数列 bb と同じにできるか判定し、可能なら操作手順を示せ
     * ii 番目の操作では、1ji1ji なる jj を1つ選び、aajj 番目に整数 jj を挿入する     * ii 番目の操作では、1ji1ji なる jj を1つ選び、aajj 番目に整数 jj を挿入する
   * 1N1001N100   * 1N1001N100
行 28: 行 28:
 最後に挿入した数字は、ai=iai=i となっているはずである。 最後に挿入した数字は、ai=iai=i となっているはずである。
  
-そのような箇所が複数ある場合は、1つ前の状態を考えると、一番右を最後に操作しないと困ったことになる。+そのような箇所が複数ある場合は、1つ前の状態を考えると、一番右を最後に操作したことにいと矛盾が発生する。
  
   i              i           
-  a             → 1,3,5 が i = ai となっている+  a             → 1,3,5 が i = ai となっている。このどれかが最後に挿入された
      
   i=3を最後に操作したことにすると、1つ前の状態は   i=3を最後に操作したことにすると、1つ前の状態は
行 87: 行 87:
 ==== 解法 ==== ==== 解法 ====
  
-こういうのは、サイコロの対面が必ず7になるように、和が同じになるペアに着目するとうまくいきそう。+自身の頂点の和を調整するために、ある辺を無くすと、その相手の和にも影響してしまうため、考え出すとこがらがる。 
 + 
 +こういうのは、サイコロの対面が必ず7になるように、和が同じになるペアに着目するとうまくいきそう。
  
   1  2  3   1  2  3
行 99: 行 101:
 ある頂点から、他の全ての頂点に辺を張った完全グラフを考える。 ある頂点から、他の全ての頂点に辺を張った完全グラフを考える。
  
-自身に対する辺のみが無いので、頂点 vv に隣接する頂点の和は SvSv となる。+自身に対する辺のみが無いので、このままでは頂点 vv に隣接する頂点の和は SvSv となる。
  
 ここで、ペアへの辺を1本だけ無くすと、STST となり、これは全ての頂点で同じとなる。 ここで、ペアへの辺を1本だけ無くすと、STST となり、これは全ての頂点で同じとなる。
行 105: 行 107:
 ==NN が奇数の場合== ==NN が奇数の場合==
  
-T=NT=N 頂点 NN だけぼっちとなるので、上記と同様に構築すると、完全グラフの時点で頂点 NN は $S-v=S-T$ となり、他の頂点と等しくなっている。+T=NT=N とする。頂点 NN だけぼっちとなる上記と同様に構築すると、完全グラフの時点で頂点 NN に隣接する頂点の和STST となり、他の頂点と等しくなっている。
  
 <sxh python> <sxh python>
行 232: 行 234:
   【こういう風に、毎回indexを定義しなおさなくてもよい】   【こういう風に、毎回indexを定義しなおさなくてもよい】
   i  1  2  3  4  5  6  7  8  9   i  1  2  3  4  5  6  7  8  9
 +  
   p  5  3  4  7  6  1  2  9  8   p  5  3  4  7  6  1  2  9  8
      ,--------------'           1を左へ      ,--------------'           1を左へ
行 355: 行 358:
 グラフを作って最短経路で解く。 グラフを作って最短経路で解く。
  
-通過する頂点は、位置を変化させない数字。通過しない頂点は、位置を変化させる。+通過する頂点は、位置を変化させない数字。通過しない頂点位置を変化させる。
  
 通過する頂点の位置を変化させないために、その間で前や後ろに持っていく必要のある数字の移動コストが、辺のコストになる。 通過する頂点の位置を変化させないために、その間で前や後ろに持っていく必要のある数字の移動コストが、辺のコストになる。
行 448: 行 451:
   * b+db+dMM 以上なのだから、c+dc+dMM 以上   * b+db+dMM 以上なのだから、c+dc+dMM 以上
  
-よって、組み替えた後も MM未満/以上分類はしい。+よって、組み替えた後も MM未満/以上という分類は成立
  
 また、a+ca+ba+ca+bb+dc+db+dc+d が成り立つので、最終的な XX の値も XX となり、常に改善される。 また、a+ca+bb+dc+d が成り立つので、最終的な X の値も XX となり、常に改善される。
programming_algorithm/contest_history/atcoder/2019/0323_agc032.txt · 最終更新: by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0