Two-Three Transformation

2 secs 1024 MB
yuki4869's icon yuki4869

11 つの隣接する組に対して、操作によって加えられる値は、非負整数 a,ba,b を用いて 2a+3b2a+3b と表されます。

この値として実現できるのは

0,2,3,4,5,0,2,3,4,5,\ldots

です。

したがって、1 つの隣接する組に加えられる値は、00 または 22 以上の整数であり、11 だけは作れません。これを利用して、列を前から順に合わせます。

位置 11 の値を変更できる操作は、組 (1,2)(1,2) に対する操作だけです。そのため、A1A_1B1B_1 にするために必要な増加量

B1A1B_1-A_1

は一意に決まります。

この値が負、または 11 なら実現不可能です。そうでなければ、その値を A1,A2A_1,A_2 の両方に加えます。

同様に、位置 i1i-1 までを既に一致させたとします。この後、位置 ii を変更できるのは組 (i,i+1)(i,i+1) に対する操作だけなので、必要な増加量

BiAiB_i-A_i

は一意に決まります。

これが 00 または 22 以上なら、その値を Ai,Ai+1A_i,A_{i+1} に加えます。負または 11 なら No です。

このように i=1,2,,N1i=1,2,\ldots,N-1 の順に処理します。一度 BiB_i と一致させた位置 ii は、それ以降の操作では変更されないため、前から順に決めてよいです。

最後の位置 NN には新たな操作を行えないため、最終的に AN=BNA_N=B_N なら Yes、そうでなければ No です。

なお、N=1N=1 のときは操作できないため、A1=B1A_1=B_1 の場合に限り Yes です。

各要素を一度ずつ調べるため、計算量 O(N)O(N) です。