AT_abc301_d [ABC301D] Bitmask

题目描述

给定一个由 `0`、`1`、`?` 组成的字符串 $S$ 和一个整数 $N$。将 $S$ 中的每个 `?` 替换为 `0` 或 `1`,并将其视为二进制整数,得到的所有可能值的集合记为 $T$。例如,当 $S=$ `?0?` 时,$T=\lbrace 000_{(2)},001_{(2)},100_{(2)},101_{(2)}\rbrace=\lbrace 0,1,4,5\rbrace$。 请输出 $T$ 中不超过 $N$ 的最大值(以十进制整数形式输出)。如果 $T$ 中没有不超过 $N$ 的值,则输出 `-1`。

输入格式

输入以以下格式从标准输入读入。 > $S$ $N$

输出格式

请输出答案。

说明/提示

## 限制条件 - $S$ 由 `0`、`1`、`?` 组成。 - $S$ 的长度为 $1$ 到 $60$。 - $1 \leq N \leq 10^{18}$。 - $N$ 是整数。 ## 样例解释 1 如题目中所示,$T=\lbrace 0,1,4,5\rbrace$。$T$ 中不超过 $N$ 的值为 $0$ 和 $1$,其中最大的是 $1$,因此输出 $1$。 ## 样例解释 2 $T=\lbrace 5\rbrace$,因此 $T$ 中没有不超过 $N$ 的值。 由 ChatGPT 4.1 翻译