差分

このページの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:
  
   * 数列 $b_1,b_2,...,b_N$ がある   * 数列 $b_1,b_2,...,b_N$ がある
-  * 空の列 $a$ に以下の操作を $N$ 回繰り返して $b$ と同じにできるか判定し、可能なら操作手順を示せ+  * 空の列 $a$ に以下の操作を $N$ 回繰り返して数列 $b$ と同じにできるか判定し、可能なら操作手順を示せ
     * $i$ 番目の操作では、$1 \le j \le i$ なる $j$ を1つ選び、$a$ の $j$ 番目に整数 $j$ を挿入する     * $i$ 番目の操作では、$1 \le j \le i$ なる $j$ を1つ選び、$a$ の $j$ 番目に整数 $j$ を挿入する
   * $1 \le N \le 100$   * $1 \le N \le 100$
行 28: 行 28:
 最後に挿入した数字は、$a_i=i$ となっているはずである。 最後に挿入した数字は、$a_i=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:
 ある頂点から、他の全ての頂点に辺を張った完全グラフを考える。 ある頂点から、他の全ての頂点に辺を張った完全グラフを考える。
  
-自身に対する辺のみが無いので、頂点 $v$ に隣接する頂点の和は $S-v$ となる。+自身に対する辺のみが無いので、このままでは頂点 $v$ に隣接する頂点の和は $S-v$ となる。
  
 ここで、ペアへの辺を1本だけ無くすと、$S-T$ となり、これは全ての頂点で同じとなる。 ここで、ペアへの辺を1本だけ無くすと、$S-T$ となり、これは全ての頂点で同じとなる。
行 105: 行 107:
 ==$N$ が奇数の場合== ==$N$ が奇数の場合==
  
-$T=N$ 頂点 $N$ だけぼっちとなるので、上記と同様に構築すると、完全グラフの時点で頂点 $N$ は $S-v=S-T$ となり、他の頂点と等しくなっている。+$T=N$ とする。頂点 $N$ だけぼっちとなる上記と同様に構築すると、完全グラフの時点で頂点 $N$ に隣接する頂点の和は $S-T$ となり、他の頂点と等しくなっている。
  
 <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+d$ で $M$ 以上なのだから、$c+d$ は $M$ 以上   * $b+d$ で $M$ 以上なのだから、$c+d$ は $M$ 以上
  
-よって、組み替えた後も $M$未満/以上分類はしい。+よって、組み替えた後も $M$未満/以上という分類は成立
  
 また、$a+c \ge a+b$、$b+d \ge c+d$ が成り立つので、最終的な $X$ の値も $X_左 \ge X_右$ となり、常に改善される。 また、$a+c \ge a+b$、$b+d \ge c+d$ が成り立つので、最終的な $X$ の値も $X_左 \ge X_右$ となり、常に改善される。
programming_algorithm/contest_history/atcoder/2019/0323_agc032.txt · 最終更新: 2019/04/21 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0