zoukankan      html  css  js  c++  java
  • 1208. 翻硬币

    状态数为(2^{100-1}),显然不能用二进制枚举了。

    观察到下列性质:

    • 交换区间反转的顺序对最终结果是没有影响的
    • 对同一个区间进行两次以上的反转是多余的

    由此,问题就转化成立求需要被反转的区间的集合。

    我们先考虑一下最左端的硬币,包含该硬币的区间只有一个,因此如果该硬币和目标状态一致,我们就不需要反转第一个区间。

    反之第一个区间需要反转,而且在此之后这个最左的全进就不需要再考虑了。

    这样一来,通过首先考虑最左端的硬币,问题的规模缩小了1.不断重复下去,就可以求出最少需要反转的次数了。

    string a,b;
    int n;
    
    int main()
    {
        cin>>a>>b;
        
        n=a.size();
        int cnt=0;
        for(int i=0;i<n-1;i++)
        {
            if(a[i] != b[i])
            {
                cnt++;
                a[i]=(a[i]=='*'?'o':'*');
                a[i+1]=(a[i+1]=='*'?'o':'*');
            }
        }
        cout<<cnt<<endl;
    }
    
  • 相关阅读:
    Servlet文件上传下载
    通过jquery将多选框变单选框
    Java 浮点数精度控制
    JS实现点击table中任意元素选中
    SpringMVC-时间类型转换
    SpringMVC--提交表单
    路径 专题
    防盗链
    Request
    RequestResponse简介
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14320170.html
Copyright © 2011-2022 走看看