atcoder#AGC043E. [AGC043E] Topology

[AGC043E] Topology

题目描述

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

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

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

输入格式

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

N N A0A1  A2N1 A_0A_1\ \cdots\ A_{2^N-1}

输出格式

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

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

L L x0 x_0 y0 y_0 x1 x_1 y1 y_1 : : xL x_L yL y_L

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

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

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

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

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

题目大意

给定正整数 N(1N8)N (1\leq N \leq 8)以及一个长度为 2N2^N0101 序列 A0,A1,,A2N1A_0,A_1, \cdots ,A_{2^N-1}(保证 A0=1A_0=1)。判断是否存在一条闭合曲线 CC,它对于所有的 2N2^N 个集合 S{0,1,,N1}S \subseteq \{0,1, \cdots ,N-1\} 都满足以下条件:

  • x=iS2ix=\sum_{i \in S} 2^iBSB_S 是点集 {(i+0,5,0,5)iS}\{(i+0,5,0,5) \mid i \in S\}
  • Ax=1A_x=1,则存在一种方法连续地移动闭曲线 CC ,使得移动后的 CC 上的任意一点的 yy 坐标都为负,且在此过程中 CC 不碰到 BSB_S
  • Ax=0A_x=0,则不存在这样一种方法。

CC 是一条闭曲线,当且仅当:

  • CC 是一个连续函数 C:[0,1]R2C: [0,1] \rightarrow \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) \not\in X

若存在这样的 CC,请构造一条这样的 CC 并输出,格式是:

先输出一个整数 LL,需满足 0L2500000\leq L \leq 250000

接下来的 L+1L+1 行,每行两个整数 x,yx,y,表示你构造的闭曲线 CC 是一条依次经过这 LL 个点的多边形,需满足:

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

可以证明,如果存在一条闭曲线满足题目中的要求,那么也存在一条闭曲线能够用这种方式表示出来。

1
10
Possible
4
0 0
0 1
1 1
1 0
0 0
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

提示

補足

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

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

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

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

制約

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

Sample Explanation 1

S =  S\ =\ \emptyset のときは閉曲線上のすべての点の y y 座標を負にすることが可能です。 ![](https://img.atcoder.jp/agc043/d44ca639698b4c14bb84b90da5442ca6.png) S = {0} S\ =\ \{0\} のときはどのようにしても閉曲線上のすべての点の y y 座標を負にすることはできません。 ![](https://img.atcoder.jp/agc043/5a960a0c4167e8593b6c8f8af685253d.png)

Sample Explanation 2

出力は図のような閉曲線を表しています。 ![](https://img.atcoder.jp/agc043/283e490d520a451f1b15160900c9b545.png)