zoukankan      html  css  js  c++  java
  • CodeForces 604C 【思维水题】`

    题意:

    给你01字符串的长度再给你一个串。

    然后你可以在这个串中选择一个起点和一个终点使得这个连续区间内所有的位取反。

    求:

    经过处理后最多会得到多少次01变换。

    例如:0101是4次,0001是2次,000110是3次。

    分析:

    区间内部的数目是不会发生变化的,因为每一位都是按位取反,相当于都没变,唯一发生变化的是区间边缘,所以考虑到连续的两个或多个1或者0的时候在其中某处设置断点会使得变换次数增加,很容易理解当某处有两个连续点的时候变换次数增加1,因为一个区间只有两个端点所以变换次数最多增加两次。

    ——————————————————————————————————————————

    以上是屌丝一开始的思维,所以开始写码....

    代码过了...但是发现一个问题...

    当连续的3个或者3个以上点的时候把区间设置在这些连续点的内部可以增加的变换次数直接+2...

    再看屌丝自己的代码...奥发现代码跟原来的想法根本不一样,只是恰好在连续的三个或者三个以上的时候设置了正确的标志变量...

    #include<stdio.h>
    int tmp[100500];
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%1d",&tmp[i]);
        }
        int ans=1,ttt=1;
        bool ok=0,ook=0;
        for(int i=2;i<=n;i++)
        {
            if(tmp[i]==tmp[i-1])
            {
                ttt++;
                if(ttt>=2)//代码的bug成了简化代码的手段...
                {
                    if(!ok)
                        ok=1;
                    else
                      ook=1;
                }
            }
            else
            {
                ttt=1;
                ans++;
            }
        }
        printf("%d
    ",ans+ok+ook);
    }
  • 相关阅读:
    sql中保留2位小数
    C# 操作字符串,在某些特定的字符后面或前面添加其它字符
    Windows Server 2008 R2中上传和下载文件
    winform中显示标题,点击打开链接
    正则表达式
    winform重绘
    js获取元素的页面坐标
    剑指offer-从上往下打印二叉树
    剑指offer-栈的压入、弹出序列
    剑指offer-包含min函数的栈
  • 原文地址:https://www.cnblogs.com/tun117/p/5051228.html
Copyright © 2011-2022 走看看