1 条题解

  • 0
    @ 2024-11-10 20:52:52

    因为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
    上传者