「MCOI-03」数据
题目背景
Rin 正在给 MCOI Round 998244353 的题目出数据。
但是她太菜了,把数据生成器写出锅了,于是数据只生成了一半然后生成器就 RE 了。
现在她想请你用这一半的数据恢复出完整的数据。
题目描述
以下是一些常见的定义,如果你很熟悉它们你也可以不看。
01 串是指仅包含 ```0``` 和 ```1``` 两种字符的字符串,仅包含其中一种也是可以的。
一个字符串取出其连续的一段称为子串。容易发现一个长度为 $2n$ 的字符串有 $n+1$ 个长度为 $n$ 的子串。
一组实数 $A$ 的平均值 $\overline{A}=\frac{\sum_{x\in A}x}{|A|}$,即所有元素的和除以元素的个数。
在此基础上,$A$ 的方差 $S^2=\frac{\sum_{x\in A}(x-\overline{A})^2}{|A|}$,即所有元素与平均值的差的平方和除以元素的个数。
一个长度为 $n$ 的 01 串 $S$ 的二进制值等于 $\sum_{i=1}^nS_i2^{n-i}$,其中 $S_i$ 是 $S$ 从左向右第 $i$ 个字符上的数字。
在本题中,给出如下定义:
一组数据是一个长度为 $2n$ 的 01 串。
一组数据的毒瘤度定义为,其所有长度为 $n$ 的子串的二进制值的方差。
现在,给定一组数据的前 $n$ 个字符。你需要找到使得这组数据的毒瘤度 **最小** 的后 $n$ 个字符。如果有多解,请按照这后 $n$ 个字符构成的子串的二进制值从小到大排序输出。
输入输出格式
输入格式
输入数据共一行,包含一个长度为 $n$ 的 01 串,表示一组数据的前 $n$ 个字符。
输出格式
输出若干行,每一行一个长度为 $n$ 的 01 串,表示一组毒瘤度最小的数据的后 $n$ 个字符,按照其二进制值从小到大排序输出。
输入输出样例
输入样例 #1
10
输出样例 #1
10
说明
#### 样例一解释
在本例中 $n=2$,存在四组满足要求的数据分别是 ```1000```,```1001```,```1010```,```1011```。
```1010``` 有三个长度为 $2$ 的子串,分别为 ```10```,```01```,```10```。它们的二进制值分别为 $2,1,2$。${2,1,2}$ 的平均值为 $\frac{5}{3}$,方差为 $\frac{2}{9}$。故 ```1010``` 的毒瘤度为 $\frac{2}{9}$。
可以计算出这四组数据的毒瘤度分别为 $\frac{8}{9},\frac{2}{3},\frac{2}{9},\frac{2}{3}$。其中 ```1010``` 是唯一毒瘤度最小的,故程序输出其后 $2$ 个字符 ```10```。
#### 数据范围与提示
保证所有数据随机生成。对于 01 串的每一位,其为 ```1``` 的概率都是 $\frac{1}{2}$ 且不同位相互独立。
本题不采用捆绑测试,按点给分。测试点 $1$ 计 $1$ 分,其他测试点每个计 $3$ 分。
每个测试点 $n$ 的规模如下表:
| 测试点编号 | $1$ | $2\sim 7$ | $8\sim 13$ | $14\sim 16$ |
| :----------: | :----------: | :----------: | :----------: | :----------: |
| $n$ | $\le 3$ | $\le20$ | $=26$ | $=56$ |
|**测试点编号**|$17\sim 20$ | $21\sim 24$ | $25\sim 28$ | $29\sim 34$ |
|$n$|$=200$ | $=500$ | $\le1000$ | $\le 1500$ |
提示:在 C++ 中您可以使用 $128$ 位整数```__int128```。