1 条题解
-
0
因为Monster是懒狗,所以题解也很水。因为每次的改变策略会影响到后续所有字符,所以最优策略应当从字符串末尾往前反转。
寻找所有01的交界处并统计数量,如果开头是0,答案加一,否则即为01分块的交界数。
例如01001,从0到1有两个交界处,从1到0有一个交界处,开头是0,所以答案为4,具体反转步骤如下。
01001 -> 01000 -> 01111 -> 00000 -> 11111
再例如10010,反转三次。
10010 -> 10011 -> 10000 -> 11111
代码
#include <bits/stdc++.h> using namespace std; int main() { string nums; int ans, len = nums.size(); if (nums[0] == '1') ans = 0; else ans = 1; for (int i = 1; i < len; i++) if (nums[i] != nums[i - 1]) ans++; cout << ans << endl; return 0; }
- 1
信息
- ID
- 227
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- (无)
- 递交数
- 73
- 已通过
- 26
- 上传者