P15962 [ICPC 2018 Jakarta R] Binary String

题目描述

二进制字符串是由 $0$ 和 $1$ 组成的非空序列,例如 `010110`、`1`、`11101` 等。阿玉有一个她最喜欢的二进制字符串 $S$,该字符串不包含前导零。她想用计算器将 $S$ 转换成它的 **十进制** 表示。 不幸的是,她的计算器无法处理任何大于 $K$ 的整数,一旦超过就会崩溃。因此,阿玉可能需要从 $S$ 中删除零个或多个二进制位,同时保持剩余位的顺序不变,使得其十进制表示不超过 $K$。得到的二进制字符串也不能包含前导零。 你的任务是帮助阿玉确定从 $S$ 中删除的最少二进制位数量,以满足阿玉的需求。 例如,设 $S = 1100101$,$K = 13$。注意 $1100101$ 的十进制表示为 $101$,因此我们需要从 $S$ 中删除若干位,使其值不超过 $K$。我们可以删除第 $3$、第 $5$ 和第 $6$ 个最高有效位,即 $11\underline{0}0\underline{10}1 \to 1101$。$1101$ 的十进制表示为 $13$,不超过 $K = 13$。在这个例子中,我们删除了 $3$ 位,这是可能的最小删除次数(如果只删除 $2$ 位,我们将得到一个长度为 $5$ 位的二进制字符串;注意到任何长度为 $5$ 位的二进制字符串的十进制值至少为 $16$)。

输入格式

输入的第一行包含一个整数 $K$($1 \leq K \leq 2^{60}$),表示阿玉计算器的限制。第二行包含一个二进制字符串 $S$($1 \leq |S| \leq 60$),表示阿玉最喜欢的二进制字符串。你可以假定 $S$ 不包含前导零。

输出格式

输出一行一个整数,表示从 $S$ 中删除的最少二进制位数量。

说明/提示

**样例输入 #1 的解释** 该样例即为题目描述中给出的示例。 **样例输入 #2 的解释** 阿玉必须删除 $4$ 位才能得到 $111$,其十进制表示为 $7$。 翻译由 DeepSeek V3.2 完成