• Broken Necklace


    Description

    你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的。 这里是 n=29 的二个 例子:

                   1 2                               1 2
               r b b r                           b r r b
             r         b                       b         b
            r           r                     b           r
           r             r                   w             r
          b               r                 w               w
         b                 b               r                 r
         b                 b               b                 b
         b                 b               r                 b
          r               r                 b               r
           b             r                   r             r
            b           r                     r           r
              r       r                         r       b
                r b r                             r r w
                图片 A                        图片  B
                    
                                r 代表 红色的珠子      
                                b 代表 蓝色的珠子   
                                w 代表 白色的珠子
    

    第一和第二个珠子在图片中已经被作记号。 图片 A 中的项链可以用下面的字符串表示: brbrrrbbbrrrrrbrrbbrbbbbrrrrb . 假如你要在一些点打破项链,展开成一条直线,然后从一端开始收集同颜色的珠子直到你遇到一个不同的颜色珠子,在 另一端做同样的事(颜色可能与在这之前收集的不同)。 确定应该在哪里打破项链来收集到最大多数的数目的珠子。 例如,在图片 A 中的项链中,在珠子 9 和珠子 10 或珠子 24 和珠子 25 之间打断项链可以收集到8个珠子。 在一些项 链中还包括白色的珠子(如图片B) 所示。 当收集珠子的时候,一个被遇到的白色珠子可以被当做红色也可以被当做蓝色。 表现含有白珠项链的字符串将会包括三个符号 r , b 和 w 。 写一个程序来确定从一条被给出的项链可以收集到的最大珠子数目。

    Input

    第 1 行: N, 珠子的数目 第 2 行: 一串长度为N的字符串, 每个字符是 r , b 或 w。

    Output

    单独的一行包含从被供应的项链可以被收集的珠子数目的最大值。

    Sample Input

    29 
    wwwbbrwrbrbrrbrbrwrwwrbwrwrrb

    Sample Output

    11 

    好长好长的代码   总之注意几个例子  www  bwb bbb   都应该输出3

    #include <algorithm>
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <cstdlib>
    #include <deque>
    using namespace std;
    typedef long long ll;
    deque <char> q;
    int main()
    {
        char a[399],t,c;
        char m='w';
        int aa=0,b=0,cc=0;
        int n,i,j,sum=0,max1=0;
        cin>>n;
        for(i=0; i<n; i++)
        {
            cin>>c;
            if(c=='r')
                aa++;
            else
            if(c=='b')
                b++;
            else
                cc++;
            q.push_back(c);
        }
        if(cc==n||aa==n||b==n)
        {
            cout<<n<<endl;
            return 0;
        }
        ll h=0;
        for(i=0;i<n;i++)
        {
            sum=0;
            h=0;
            while(1)
            {
                t=q.back();
                if(t=='r')
                {
                    c='r';
                    break;
                }
                else
                if(t=='b')
                {
                   c='b';
                   break;
                }
                q.pop_back();
                if(q.empty())
                {
                   cout<<n<<endl;
                   return 0;
                }
                h++;
            }
            if(q.empty())
            {
                cout<<n<<endl;
                return 0;
            }
            for(j=h-1;j>=0;j--)
                q.push_back(m);
            memset(a,0,sizeof(a));
            h=0;
            while(1)
            {
                t=q.back();
                if(t=='w'||t==c)
                    sum++;
                else
                    break;
                if(sum>=n)
                {
                   cout<<n<<endl;
                   return 0;
                }
                q.pop_back();
                a[h++]=t;
            }
            for(j=h-1;j>=0;j--)
            {
                q.push_back(a[j]);
            }
            memset(a,0,sizeof(a));
            h=0;
            while(1)
            {
                t=q.front();
                if(t=='r')
                {
                    c='r';
                    break;
                }
                else
                if(t=='b')
                {
                   c='b';
                   break;
                }
                else
                {
                    q.pop_front();
                    h++;
                }
    
            }
            //for(j=h-1;j>=0;j--)
               // q.push_front(m);
            while(1)
            {
                t=q.front();
                if(t=='w'||t==c)
                    sum++;
                else
                   break;
                a[h++]=t;
                q.pop_front();
            }
            //q.push_back(a[0]);
            for(j=h-1;j>=0;j--)
                q.push_front(a[j]);
    
            if(sum>=max1)
                max1=sum;
    
            char t=q.front();
            q.pop_front();
            q.push_back(t);
    //        int siz=q.size();
    //        for(j=0;j<siz;j++)
    //        {
    //            char t=q.front();
    //            cout<<t;
    //            q.pop_front();
    //            q.push_back(t);
    //        }
    //        cout<<endl;
        }
        if(max1>=n)
           cout<<n<<endl;
        else
           cout<<max1<<endl;
        return 0;
    }
    
    
  • 相关阅读:
    JVM参数配置
    域渗透命令
    相对路径绝对路径
    ESPCMS的CSRF添加管理员账号
    nmap脚本nse的使用
    Nmap简单的漏扫
    MS08-067
    lcx用法
    给自己的服务器传文件 转自别人
    突破大文件上传 和内网ip的端口转发
  • 原文地址:https://www.cnblogs.com/zcy19990813/p/9702689.html
Copyright © 2020-2023  润新知