Exact Error Engineering

2 secs 1024 MB
yuki4869's icon yuki4869

解説

判定

まず、任意の順列 PP について S(P)S(P) は偶数です。

整数 xx について xx(mod2)|x|\equiv x\pmod 2 なので、

S(P)i=1N(Pii)i=1NPii=1Ni0(mod2)S(P) \equiv \sum_{i=1}^{N}(P_i-i) \equiv \sum_{i=1}^{N}P_i-\sum_{i=1}^{N}i \equiv 0 \pmod 2

が成り立ちます。

次に、S(P)S(P) の最大値を求めます。

Pi>iP_i>i を満たす添字の集合を UU とし、U=m|U|=m とします。i=1N(Pii)=0\sum_{i=1}^{N}(P_i-i)=0 であるため、

S(P)=2iU(Pii)S(P)=2\sum_{i\in U}(P_i-i)

と表せます。

mm 個の PiP_i の和は、大きい方から mm 個を選んだ場合以下です。また、mm 個の添字 ii の和は、小さい方から mm 個を選んだ場合以上です。したがって、

iU(Pii)i=Nm+1Nii=1mi=m(Nm)\sum_{i\in U}(P_i-i) \leq \sum_{i=N-m+1}^{N}i-\sum_{i=1}^{m}i = m(N-m)

です。

m(Nm)m(N-m) の最大値は N2/4\left\lfloor N^2/4\right\rfloor なので、

S(P)2N24=N22S(P)\leq 2\left\lfloor\frac{N^2}{4}\right\rfloor = \left\lfloor\frac{N^2}{2}\right\rfloor

となります。

よって、KK が奇数、または K>N2/2K>\left\lfloor N^2/2\right\rfloor なら、条件を満たす順列は存在しません。

以下では、KK が偶数かつ KN2/2K\leq\left\lfloor N^2/2\right\rfloor なら、必ず構築できることを示します。

構築

はじめ、P=(1,2,,N)P=(1,2,\ldots,N) とします。また、作るべきスコアの半分を R=K/2R=K/2 とします。

まだ変更していない区間の左端を ll、右端を rr とします。最初は l=1, r=Nl=1,\ r=N です。

位置 ll と位置 rr はまだ変更されていないため、Pl=l, Pr=rP_l=l,\ P_r=r です。これらを入れ替えると、この2要素のスコアへの寄与は

rl+lr=2(rl)|r-l|+|l-r|=2(r-l)

となります。

そこで、次の操作を繰り返します。

  • RrlR\geq r-l なら、PlP_lPrP_r を入れ替え、RR から rlr-l を引く。その後、ll11 増やし、rr11 減らす。
  • 0<R<rl0<R<r-l なら、PlP_lPl+RP_{l+R} を入れ替えて終了する。
  • R=0R=0 なら、そのまま終了する。

最後の場合、位置 ll と位置 l+Rl+R の入れ替えによって増えるスコアは 2R2R なので、残っているスコアをちょうど作れます。

正当性

この構築が条件を満たすことを示します。

外側から位置 l,rl,r を入れ替えた後は、その2位置を以降の操作で使用しません。そのため、各入れ替えで変化する位置は互いに異なり、それぞれのスコアへの寄与を独立に足し合わせることができます。

位置 l,rl,r の入れ替えではスコアが 2(rl)2(r-l) 増え、RR をちょうど rlr-l 減らしています。また、最後に位置 l,l+Rl,l+R を入れ替える場合は、スコアがちょうど 2R2R 増えます。

したがって、終了時に作られたスコアは最初の 2R=K2R=K と一致します。

あとは、途中で使用できる位置がなくなる前に R=0R=0 になることを示します。

外側からすべての組を入れ替えたとき、入れ替える位置間の距離の総和は

  • N=2mN=2m のとき、(2m1)+(2m3)++1=m2(2m-1)+(2m-3)+\cdots+1=m^2
  • N=2m+1N=2m+1 のとき、2m+(2m2)++2=m(m+1)2m+(2m-2)+\cdots+2=m(m+1)

です。

どちらの場合も、この値は N2/4\left\lfloor N^2/4\right\rfloor です。仮定より R=K/2N2/4R=K/2\leq\left\lfloor N^2/4\right\rfloor なので、構築に必要な距離の合計は十分に存在します。

以上より、KK が偶数かつ KN2/2K\leq\left\lfloor N^2/2\right\rfloor なら、スコアがちょうど KK となる順列を必ず構築できます。

したがって、条件を満たす順列が存在するための必要十分条件は、KK が偶数かつ KN2/2K\leq\left\lfloor N^2/2\right\rfloor であることです。

計算量

各位置を高々一度しか操作しないため、計算量は O(N)O(N) です。