最初の質問の順列
エスキモーは、(それが裸の程度を記載していない)の表題の逆であります
上から見た場合は、ロールが現在のそれを交換するために、水平左右の数であることがわかります。したがって、この質問の最初の部分はダウン直接スワップ暴力からのものであってもよいです。
第二の部分のために、マップは図に見ることができるように逆さまに配置回mを切り替えるリカバリ順序通される逆。
最小スイッチング周波数である水平ラインの最小数は、番号の逆です。
アナログ交換機の第二の部分の最初の部分+統計点100の数の逆の順序でソートマージ
書式#include <cstdioを> 使用して 名前空間はstdを、 const int型 N = 1000007 ; INTのN、M、HX [N]、[N]、[N] C、CNT。 ボイドソート(int型 L、INT R) { 場合(L == R)のリターン; INT半ば= L + R >> 1。INT、T = 1、Q =ミッド+ 1、P = 1- 1 。 ソート(L、MID)、ソート(MID + 1 、R)。 一方、(Q <= R && T <= MID) { 場合([T]> [Q]) { CNT+ =中間T + 1 。 C [ Q ++; ++ pは] [Q]を= 。 } そう [++ P] Cは= [T ++ ]。 } 一方、(Q <= R)C [++ pは] [++ Qは= ]。 しながら(T <= MID)のC [++ pは] = [T ++ ]。 以下のために(int型私はLを=; I <= R; I ++)は[I] =のC [i]は、 } ボイドスワップ(INT&X、INT&Y) { int型温度= X; X = Y; Yは= TEMP。 } int型のmain() { scanf関数(" %D%dの"、&N、&M)。 ために(int型 I = 1 ; I <= M; iが++)のscanf(" %dの"、およびHX [I])。 以下のために(int型 i = 1 ; iが<= N; iは++)[I] = I。 以下のために(int型私= 1 ; I <= M; I ++)はスワップ([HX [I]、[HX [I] + 1 ])。 用(int型 I = 1のprintf(; iが<= N I ++)は、 " %のD " 、[I])。 ソート(1 、N) // - (I = 1をint型、iが<= N; iが++)のためのprintf( "%dの"、[I])。 printf(" \ n%D " 、CNT)。 }
検査は、ロードマップそのトピックであるとき、私はその半分の面であきらめて考え抜かと思います。まだ若すぎます。