zoukankan      html  css  js  c++  java
  • Balls of Buma

    Balph is learning to play a game called Buma. In this game, he is given a row of colored balls. He has to choose the color of one new ball and the place to insert it (between two balls, or to the left of all the balls, or to the right of all the balls).

    When the ball is inserted the following happens repeatedly: if some segment of balls of the same color became longer as a result of a previous action and its length became at least $$$3$$$, then all the balls of this segment are eliminated.

    Consider, for example, a row of balls 'AAABBBWWBB'. Suppose Balph chooses a ball of color 'W' and the place to insert it after the sixth ball, i. e. to the left of the two 'W's. After Balph inserts this ball, the balls of color 'W' are eliminated, since this segment was made longer and has length $$$3$$$ now, so the row becomes 'AAABBBBB'. The balls of color 'B' are eliminated now, because the segment of balls of color 'B' became longer and has length $$$5$$$ now. Thus, the row becomes 'AAA'. However, none of the balls are eliminated now, because there is no elongated segment.

    Help Balph count the number of possible ways to choose a color of a new ball and a place to insert it that leads to the elimination of all the balls.

    Input

    The only line contains a non-empty string of uppercase English letters of length at most $$$3 cdot 10^5$$$. Each letter represents a ball with the corresponding color.

    Output

    Output the number of ways to choose a color and a position of a new ball in order to eliminate all the balls.

    Examples

    Input

    Copy

    BBWWBB
    

    Output

    Copy

    3
    

    Input

    Copy

    BWWB
    

    Output

    Copy

    0
    

    Input

    Copy

    BBWBB
    

    Output

    Copy

    0
    

    Input

    Copy

    OOOWWW

    Output

    Copy

    0
    

    Input

    Copy

    WWWOOOOOOWWW
    

    Output

    Copy

    7
    

    ​ 正确

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+7;
    int num[3*N];
    char al[3*N];
    int main()
    {
        string s;
        cin>>s;
        int len=s.size();
        int l=1;
        int cnt=0;
        for(int i=1;i<len;i++)
        {
            if(s[i]!=s[i-1])
            {
                al[cnt]=s[i-1];
                num[cnt++]=l;
                l=1;
            }
            else
                l++;
        }
        num[cnt]=l;
        al[cnt]=s[len-1];
       // for(int i=0;i<=cnt;i++) cout<<num[i]<<' ';
       if((cnt+1)%2==0) {
            cout<<0<<endl;
       return 0;
       }
       bool flag=0;
       for(int i=0;i<=cnt;i++)
       {
           if(al[i]!=al[cnt-i]||num[i]+num[cnt-i]<3)
           {
               flag=1;
               break;
           }
       }
       if(flag) cout<<0<<endl;
       else cout<<num[cnt/2]+1<<endl;   //而非长度3
       return 0;
    
    }
    
    
  • 相关阅读:
    C#开源爬虫NCrawler源代码解读以及将其移植到python3.2(3)
    C#开源爬虫NCrawler源代码解读以及将其移植到python3.2(2)
    C#开源爬虫NCrawler源代码解读以及将其移植到python3.2(1)
    python将项目文件打包发布的脚本(保留原来的项目结构)
    .net stream 转成 bytes[] 的实例和注意事项
    大区间素数筛选(POJ 2689)
    B. Duff in Love
    A. Duff and Meat
    NEFU_117素数个数的位数
    HDU_5504 GT and sequence
  • 原文地址:https://www.cnblogs.com/xxffxx/p/13613132.html
Copyright © 2011-2022 走看看