欢迎来到起遇信息学
起遇信息学正处于上线筹建阶段,以下功能已全部开放免费体验: ✅ 完整题库浏览与代码提交评测(C / C++ / Python / Java 等) ✅ 入门到进阶的系列课程试读、作业与考试 ✅ AI 提示、AI 作业分析等智能助教功能 ✅ 赛事模拟与个人能力报告 ✅ 邮箱注册开放 ⏳ 付费课程订阅与微信/支付宝支付通道 ⏳ 手机号登录,微信扫码登录、微信公众号绑定 使用中如遇任何问题,欢迎通过页面底部 **"联系我们"** 与我们沟通。
CF2103B.Binary Typewriter
Binary Typewriter
题目描述
给定一个长度为 的二进制字符串 和一个带有两个按钮(0 和 1)的打字机。初始时,你的手指放在按钮 0 上。你可以执行以下两种操作:
- 按下当前手指所在的按钮。这将打出该按钮上的字符。
- 将手指移动到另一个按钮。如果手指在按钮 0 上,则移动到按钮 1,反之亦然。
二进制字符串的代价定义为输入整个字符串所需的最少操作次数。
在输入之前,你可以选择最多反转 的一个子串 。更正式地说,你可以选择两个下标 ,并将子串 反转,得到新字符串 $s_1s_2 \ldots s_{l-1}s_rs_{r-1} \ldots s_ls_{r+1} \ldots s_n$。
你的任务是找出在最多进行一次子串反转后,所有可能得到的字符串中的最小可能代价。
字符串 是字符串 的子串,当且仅当 可以通过从 的开头和结尾删除若干(可能为零或全部)字符得到。
输入格式
每个测试包含多个测试用例。第一行输入测试用例数量 ()。接下来是各测试用例的描述。
每个测试用例的第一行包含一个整数 ()——二进制字符串 的长度。
每个测试用例的第二行包含一个二进制字符串 ( 或 )——二进制字符串 的字符。
保证所有测试用例的 之和不超过 。
输出格式
对于每个测试用例,输出在最多进行一次子串反转后,字符串 的最小代价。
说明/提示
在第一个测试用例中,我们可以选择不反转任何子串。我们可以执行操作 1 三次来输入 000。
在第二个测试用例中,我们可以选择不反转任何子串。我们可以执行操作 2 将手指移动到按钮 1,然后执行操作 1 三次来输入 111。
在第三个测试用例中,我们可以选择不反转任何子串。我们可以执行操作 1 输入 0,然后执行操作 2 将手指移动到按钮 1,最后执行操作 1 两次输入 11,最终以 4 次操作得到字符串 011。
在第四个测试用例中,我们可以反转子串 ,得到字符串 001。我们可以执行操作 1 两次输入 00,然后执行操作 2 将手指移动到按钮 1,最后执行操作 1 一次输入 1,最终以 4 次操作得到字符串 001。
在第五个测试用例中,我们可以反转子串 ,得到字符串 11001。该字符串的代价为 8,操作序列如下:
- 执行操作 2 将手指移动到按钮 1。
- 执行操作 1 两次输入 11。
- 执行操作 2 将手指移动到按钮 0。
- 执行操作 1 两次输入 00。
- 执行操作 2 将手指移动到按钮 1。
- 执行操作 1 一次输入 1。
在第六个测试用例中,我们可以反转子串 ,得到字符串 1101111011001001000。可以证明,输入该二进制字符串所需的最少操作次数为 29。
翻译由 DeepSeek V3 完成
样例
6
3
000
3
111
3
011
3
100
5
10101
19
1101010010011011100
3
4
4
4
8
29
在线编程 IDE
建议全屏模式获得最佳体验
| 进入全屏编程 | Alt+E |
| 递交评测 | Ctrl+Enter |
| 注释/取消注释 | Ctrl+/ |
| 缩放字体 | Ctrl+滚轮 |