• 第十九周OJ—Roken Necklace


    你有一条由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 。 写一个程序来确定从一条被给出的项链可以收集到的最大珠子数目。

    /*
    * Copyright (c) 2014,烟台大学计算机学院
    * All right reserved.
    * 作者:邵帅
    * 文件:demo.cpp
    * 完成时间:2014年12月29日
    * 版本号:v1.0
    */
    #include <iostream>
    #include <string>
    using namespace std;
    string nek;
    int n,l[100];
    int main()
    {
        cin >>n;
        cin >>nek;
        nek+=nek;
        int i,j,max=0;
        for (i=0; i<2*n; i++)
        {
            int j;
            for (j=i; j<2*n; j++)
                if(nek[j]!='w')
                    break;
            char c=nek[j];
            for (; j<2*n; j++)
                if(nek[j]!=c && nek[j]!='w')
                    break;
            l[i]+=j-i;
            j=i-1;
            for (j; j>-1; j--)
                if (nek[j]!='w')
                    break;
            c=nek[j];
            for (j; j>=0; j--)
                if (nek[j]!=c && nek[j]!='w')
                    break;
            l[i]+=i-j-1;
    
        }
        for (i=1; i<=n; i++)
            if (l[i]>max) max=l[i];
        if (max>=n) cout <<n <<endl;
        else cout <<max <<endl;
        return 0;
    }
    

    运行结果:



    @ Mayuko

  • 相关阅读:
    IOS开发-cell的动态高度
    IOS开发-视频,音频,录音简单总结
    cocoapods的安装及注意事项
    CUICatalog: Invalid asset name supplied: (null) _configureCellForDisplay:forIndexPath
    IOS开发—数据库的使用
    IOS开发-键盘通知自定义键盘
    IOS开发-手势简单使用及手势不响应处理办法
    IOS开发-UITextField代理常用的方法总结
    Linux Shell 编程学习笔记
    Java的进程内缓存框架:EhCache
  • 原文地址:https://www.cnblogs.com/mayuko/p/4567566.html
Copyright © 2020-2023  润新知