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

    程序名称

    beads

    输入格式

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

    样例输入

    (文件 beads.in)

    29 
    wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
    

    输出格式

    单独的一行 最大可能取得的珠子数

    样例输出

    (文件 beads.out)

    11

    时间限制: 1000ms
    空间限制: 128MB

    代码如下:
     

    1. #include <iostream>
    2. using namespace std;
    3. int main(){
    4. int n, max=0,a,x,j;
    5. string s;
    6. char c;
    7. cin>>n>>s;
    8. s=s+s;
    9. for(int i=0;i<n;i++){
    10. c=(char) s[i];
    11. if(c=='w'){
    12. x=0;
    13. }else{
    14. x=1;
    15. }
    16. j=i;
    17. a=0;
    18. while(x<=2){
    19. while(j<n+i&&(s[j]==c||s[j]=='w')){
    20. a++;
    21. j++;
    22. }
    23. x++;
    24. c=s[j];
    25. }
    26. if(a>max){
    27. max=a;
    28. }
    29. }
    30. cout<<max<<endl;
    31. return 0;
    32. }
  • 相关阅读:
    Docker 学习笔记总结(二)
    MM-Camera架构-Open 流程分析
    今天讲vue讲解专栏里的VUE组件
    软文推广中如何搭建媒体矩阵
    06-预约管理-套餐管理的增删改查和定时任务删除图片
    MIT6.5830 Lab0-Go tutorial实验记录(三)
    每天5分钟机器学习算法:支持向量机的目标函数是怎么来的?
    从零开始学习JavaScript:轻松掌握编程语言的核心技能①
    Spring 随笔 AOP 3-自调用
    使用Mondo Rescue对CentOS7进行封装
  • 原文地址:https://blog.csdn.net/Annconda/article/details/128155663