CF1698G Long Binary String

题目描述

有一个长度为 $10^{100}$ 的二进制字符串 $t$,初始时所有位都是 $\texttt{0}$。给定一个二进制字符串 $s$,你可以进行如下操作若干次: - 选择 $t$ 的某个子串,并用 $s$ 与其进行按位异或替换。$^\dagger$ 经过若干次操作后,字符串 $t$ 恰好有两位是 $\texttt{1}$,即存在且仅存在两个不同的下标 $p$ 和 $q$,使得 $t$ 的第 $p$ 位和第 $q$ 位为 $\texttt{1}$,其余所有位均为 $\texttt{0}$。请找出满足条件的字典序最大的 $t$,并输出这两个下标 $p$ 和 $q$,如果不存在这样的 $t$,则输出 $-1$。 $^\dagger$ 形式化地说,选择一个下标 $i$,满足 $0 \leq i \leq 10^{100}-|s|$。对于所有 $1 \leq j \leq |s|$,如果 $s_j = \texttt{1}$,则翻转 $t_{i+j}$。即如果 $t_{i+j}=\texttt{0}$,则令 $t_{i+j}=\texttt{1}$;如果 $t_{i+j}=\texttt{1}$,则令 $t_{i+j}=\texttt{0}$。 $^\ddagger$ 对于长度相同的二进制字符串 $a$ 和 $b$,如果在第一个不同的位置 $a$ 的该位为 $\texttt{1}$ 而 $b$ 的该位为 $\texttt{0}$,则称 $a$ 的字典序大于 $b$。

输入格式

输入仅一行,一个二进制字符串 $s$($1 \leq |s| \leq 35$)。

输出格式

如果不存在满足条件的字符串 $t$,输出 $-1$。否则,输出两个整数 $p$ 和 $q$($1 \leq p < q \leq 10^{100}$),表示字典序最大的 $t$ 中为 $\texttt{1}$ 的两个下标。

说明/提示

在第一个样例中,你可以进行如下操作: $$ \texttt{00000}\ldots \to \color{red}{\texttt{1}}\texttt{0000}\ldots \to \texttt{1}\color{red}{\texttt{1}}\texttt{000}\ldots $$ 在第二个样例中,你可以进行如下操作: $$ \texttt{00000}\ldots \to \color{red}{\texttt{001}}\texttt{00}\ldots \to \texttt{0}\color{red}{\texttt{011}}\texttt{0}\ldots $$ 在第三个样例中,你可以进行如下操作: $$ \texttt{00000}\ldots \to \color{red}{\texttt{1111}}\texttt{0}\ldots \to \texttt{1}\color{red}{\texttt{0001}}\ldots $$ 可以证明,这些 $t$ 都是字典序最大的。 在第四个样例中,你无法使任意一位变为 $\texttt{1}$,因此无解。 由 ChatGPT 4.1 翻译