/
Time Limit: 1 sec / Memory Limit: 1024 MiB
配点 : 800 点 (部分点あり)
くろうさ「https://codeforces.com/contest/1991/problem/F」
しろうさ「これって n = 6 だと分割 10 通り全探索しなきゃいけないの?」
くろうさ「そんなことないよ」
しろうさ「意外と 1 通りくらいスキップしても落ちないことがあるのかぁ」
くろうさ「ということで今年は 171 問持ってきたよ」
しろうさ「大量の提出はお控えくださいね」
問題文
N を正整数とする.
集合 \{1, 2, \ldots, 2N\} の N 元集合 2 個への分割全体を \mathcal{P} とする.\lvert \mathcal{P} \rvert = \frac{1}{2} \binom{2N}{N} である.例えば,N = 3 のとき \{ \{ 1, 5, 6 \}, \{ 2, 3, 4 \} \} \in \mathcal{P} である.
1 \le a_1 < a_2 < \cdots < a_{2N} を満たす整数組 (a_1, a_2, \ldots, a_{2N}) に対し,良い分割とは,P \in \mathcal{P} であって,任意の I \in P に対し,辺の長さの集合が \{ a_i \mid i \in I \} となる非退化単純 N 角形が存在することとする.例えば,N = 3 のとき \{ \{ 1, 5, 6 \}, \{ 2, 3, 4 \} \} が良い分割であるための条件は,a_1, a_5, a_6 が三角形の 3 辺の長さかつ a_2, a_3, a_4 が三角形の 3 辺の長さとなることである.
N および,P \in \mathcal{P} が与えられる.良い分割がちょうど P のみであるような整数 1 \le a_1 < a_2 < \cdots < a_{2N} は存在するか?
- 存在するとき,そのような (a_1, a_2, \ldots, a_{2N}) であってさらに a_{2N} \le 10^{17} を満たすものが存在することが証明できる.これらすべてを満たす (a_1, a_2, \ldots, a_{2N}) を 1 つ求めよ.
- 存在しないとき,次の条件を満たす非負整数 k と分割 Q_1, Q_2, \ldots, Q_k \in \mathcal{P} が存在するので,そのようなもののうち k が最小なものを 1 つ求めよ:
- j = 1, 2, \ldots, k に対し,Q_j \ne P.
- 任意の 1 \le a_1 < a_2 < \cdots < a_{2N} に対し,P が良い分割ならば,Q_1, Q_2, \ldots, Q_k のうち少なくとも 1 個は良い分割である.
入出力において,\mathcal{P} の元は,N 個の 0 と N 個の 1 からなる末尾が 1 の文字列で表す.各文字種の index の集合が分割の各元を表す.例えば,N = 3 のとき \{ \{ 1, 5, 6 \}, \{ 2, 3, 4 \} \} を 100011 で表す.
制約
- 3 \le N \le 5.
部分点
- 制約を満たすすべての可能な入力データが 1 個ずつ含まれる.各データについて,正解した場合は N 点が与えられる.
入力
入力は以下の形式で標準入力から与えられる.
N P
出力
問題文中の 2 つの場合に応じて,以下のいずれかの形式で出力せよ.
YES a_1 a_2 \cdots a_{2N}
NO k Q_1 Q_2 \cdots Q_k
入力例 1
3 100011
出力例 1
YES 2 4 6 8 10 11
P = \{ \{ 1, 5, 6 \}, \{ 2, 3, 4 \} \} である.
この出力例について,2, 10, 11 は三角形の 3 辺の長さとなり,4, 6, 8 も三角形の 3 辺の長さとなるので,P が良い分割になっている.他の分割が良い分割にならないこともわかる.
入力例 2
3 100101
出力例 2
NO 1 100011
P = \{ \{ 1, 4, 6 \}, \{ 2, 3, 5 \} \} である.
以下の 3 個の条件
- 1 \le a_1 < a_2 < a_3 < a_4 < a_5 < a_6
- a_1, a_4, a_6 が三角形の 3 辺の長さとなる
- a_2, a_3, a_5 が三角形の 3 辺の長さとなる
が成り立つならば,以下の 2 個の条件
- a_1, a_5, a_6 が三角形の 3 辺の長さとなる
- a_2, a_3, a_4 が三角形の 3 辺の長さとなる
が成り立つことがわかる.