atcoder#AGC043E. [AGC043E] Topology

[AGC043E] Topology

配点 : 14001400

問題文

正整数 NN と、長さ 2N2^N0011 からなる数列 A0,A1,,A2N1A_0,A_1,\ldots,A_{2^N-1} が与えられます。 2N2^N 個すべての S{0,1,,N1}S \subseteq \{0,1,\ldots,N-1 \} について、以下の条件を満たす閉曲線 CC が存在するか判定し、存在する場合はひとつ構成してください。

  • x=iS2ix = \sum_{i \in S} 2^i とする。また、点集合 BSB_S{(i+0.5,0.5)iS}\{ (i+0.5,0.5) | i \in S \} と定義する。
  • 閉曲線 CCBSB_S を通らずに連続的に動かして、閉曲線上のすべての点の yy 座標を負にするような方法が存在するならば、Ax=1A_x = 1 である。
  • 閉曲線 CCBSB_S を通らずに連続的に動かして、閉曲線上のすべての点の yy 座標を負にするような方法が存在しないならば、Ax=0A_x = 0 である。

出力方法に関しては、"出力" のチャプターを読んでください。

補足

CC が閉曲線であるとは、次のように定義される。

  • CC[0,1][0,1] から R2\mathbb{R}^2 への連続関数であり、C(0)=C(1)C(0) = C(1) を満たす。

閉曲線 CC を点集合 XX を通らずに閉曲線 DD に連続的に動かせるとは、次のように定義される。

  • 次の条件を満たす関数 f:[0,1]×[0,1]R2f : [0,1] \times [0,1] \rightarrow \mathbb{R}^2 が存在する。- ff は連続。
    • f(0,t)=C(t)f(0,t) = C(t)
    • f(1,t)=D(t)f(1,t) = D(t)
    • f(x,t)Xf(x,t) \notin X
  • ff は連続。
  • f(0,t)=C(t)f(0,t) = C(t)
  • f(1,t)=D(t)f(1,t) = D(t)
  • f(x,t)Xf(x,t) \notin X

制約

  • 1N81 \leq N \leq 8
  • Ai=0,1(0i2N1)A_i = 0,1 \quad (0 \leq i \leq 2^N-1)
  • A0=1A_0 = 1

入力

入力は以下の形式で標準入力から与えられる。

NN

A0A1A2N1A_0A_1 \cdots A_{2^N-1}

出力

条件を満たす閉曲線が存在しないならば Impossible と出力せよ。

存在するならば、まず 11 行目に Possible と出力せよ。 その後、以下の形式で構成した閉曲線を出力せよ。

LL

x0x_0 y0y_0

x1x_1 y1y_1

::

xLx_L yLy_L

これは、閉曲線として (x0,y0),(x1,y1),,(xL,yL)(x_0,y_0),(x_1,y_1),\ldots,(x_L,y_L) をこの順に通る閉折れ線を選ぶことを意味する。

出力は次の条件を満たしている必要がある。

  • 0xiN0 \leq x_i \leq N, 0yi10 \leq y_i \leq 1, xi,yix_i,y_i は整数 \quad (0iL0 \leq i \leq L)
  • xixi+1+yiyi+1=1|x_i-x_{i+1}| + |y_i-y_{i+1}| = 1 \quad (0iL10 \leq i \leq L-1)
  • (x0,y0)=(xL,yL)(x_0,y_0) = (x_L,y_L)

また、閉曲線の長さ LL は、 0L2500000 \leq L \leq 250000 を満たす必要がある。

もとの問題で条件を満たす閉曲線が存在するならば、この出力形式のもとでも存在することが証明できる。

1
10
Possible
4
0 0
0 1
1 1
1 0
0 0

S=S = \emptyset のときは閉曲線上のすべての点の yy 座標を負にすることが可能です。

S={0}S = \{0\} のときはどのようにしても閉曲線上のすべての点の yy 座標を負にすることはできません。

2
1000
Possible
6
1 0
2 0
2 1
1 1
0 1
0 0
1 0

出力は図のような閉曲線を表しています。

2
1001
Impossible
1
11
Possible
0
1 1