zoukankan      html  css  js  c++  java
  • codeforces 1025C Plasticine zebra

    链接http://codeforces.com/contest/1025/problem/C

    在由w和b组成的字符串中切一刀,两段各自逆序,然和拼接,要求最后w和b轮流出现的最长子段的长度。这个操作有一个很特殊的性质。先考虑字符串“1234|54321”在‘|’处切开,然后逆序之后的新字符串是“4321|12345”。想象将字符串的两段连起来组成一个环,可以发现字符串的相对顺序没变,原字符串顺时针和后字符串的逆时针是一样的,所以只要在字符串中找到最长的符合要求的子段即可。

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<string>
    #include<vector>
    #define DEBUG(x) cout<<#x<<" = "<<x<<endl
    using namespace std;
    const int MAXN=1e5+10;
    char s[MAXN];
    int main()
    {
    //    freopen("in.txt","r",stdin);
        scanf("%s",s);
        int l=strlen(s);
        bool w=s[0]=='w';
        int ans=-1;
        int cnt=0;
        int k=0;
        while(1){
            int i=k%l;
            if(w^(s[i]=='w')){
                ans=max(ans,cnt);
                if(k>=l)break;
                cnt=0;
                w=s[i]=='w';
                ///if(s[i]=='b')k++;
            }
            else {
                cnt++;
                w^=1;
                k++;
            }
            if(k==2*l){ans=cnt/2;break;}
        }
        printf("%d
    ",ans);
    }
  • 相关阅读:
    HDU2059(龟兔赛跑)
    pat 1012 The Best Rank
    pat 1010 Radix
    pat 1007 Maximum Subsequence Sum
    pat 1005 Sign In and Sign Out
    pat 1005 Spell It Right
    pat 1004 Counting Leaves
    1003 Emergency
    第7章 输入/输出系统
    第六章 总线
  • 原文地址:https://www.cnblogs.com/MalcolmMeng/p/9536620.html
Copyright © 2011-2022 走看看