Broken Necklace 坏掉的项链 USACO 模拟(易错)

1004: 1.1.4Broken Necklace 坏掉的项链

时间限制: 1 Sec  内存限制: 128 MB
提交: 11  解决: 9
[提交] [状态] [讨论版] [命题人:外部导入]

题目描述

1.1.4Broken Necklace 坏掉的项链

(beads.pas/c/cpp)

题目描述

你有一条由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

提示

 

来源/分类

USACO-01

天哪简直太惨了 这么简单的一道题竟然调了30分钟 呜呜呜呜

先贴代码再讲讲吧  超级无敌复杂代码

我用的是思路2 但是有很多特殊情况没有考虑到

1.rwwwwb要是从左往右扫 我一开始的判断是只要s[i]==s[i+1] || s[i]==‘w‘ || s[i+1]==‘w‘

在这里就不行了 b和上一个w是可以匹配的 但是和一开始的r不一样

所以我就加了

第7-9行那一段就是考虑了上面的特殊情况 找到第一个非w的字母

2. bbbb

我之前是从左往右到头扫一遍 反过来从尾到头再扫一遍 答案就出来了8

应该判断如果从左往右扫的时候扫到了头就不用再从右往左扫了

并且从右往左扫只需要到从左往右扫最末到达的那个位置和后一个位置就行了O(∩_∩)O哈哈~

还是不熟练 需要加油啊

代码来啦(特别长)

 
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int l,r;
 4 char s[705];
 5 int check(){
 6     int sum=1;
 7     char c;int index=l;
 8     while(s[index]==‘w‘) index++;
 9     c=s[index];
10     int i;
11     for(i=l+1;i<=r;i++){
12         if(s[i]==s[i-1]||s[i]==‘w‘) sum++;
13         else if(s[i-1]==‘w‘&&s[i]==c) sum++;
14         else break;
15     }
16     int fanwei=i-1;
17     index=r;
18     while(s[index]==‘w‘&&index>fanwei) index--;
19     c=s[index];
20     if(fanwei==r)
21         return sum;
22     sum++;
23     for(i=r-1;i>fanwei;i--) {
24         if(s[i]==s[i+1]||s[i]==‘w‘) sum++;
25         else if(s[i+1]==‘w‘&&s[i]==c) sum++;
26         else break;
27     }
28     return sum;
29 }
30 int main(){
31     int len;
32     cin>>len>>s;
33     int maxn=-1;
34     l=0;r=len-1;
35     for(int i=1;i<=len;i++)
36     {
37         maxn=max(maxn,check());
38         l++;r++;
39         s[r]=s[l-1];
40     }
41     cout<<maxn;
42 }

原文地址:https://www.cnblogs.com/Tidoblogs/p/11285951.html

时间: 2024-10-13 22:35:35

Broken Necklace 坏掉的项链 USACO 模拟(易错)的相关文章

洛谷 P1203 [USACO1.1]坏掉的项链Broken Necklace

P1203 [USACO1.1]坏掉的项链Broken Necklace 题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A 中的项链可以用下面的字符串表示: brbrrrbbbrrrrrbrrbbrbbbbrrrrb 假如你要在一些点打破项链,展开成一条直线,然后从一端开始收集同颜色的珠子直到你遇到一个不同的颜色珠子,在另一端做同样的事(颜色可能与在这之前收

P1203 [USACO1.1]坏掉的项链Broken Necklace

P1203 [USACO1.1]坏掉的项链Broken Necklace 题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A 中的项链可以用下面的字符串表示: brbrrrbbbrrrrrbrrbbrbbbbrrrrb 假如你要在一些点打破项链,展开成一条直线,然后从一端开始收集同颜色的珠子直到你遇到一个不同的颜色珠子,在另一端做同样的事(颜色可能与在这之前收

题解 P1203 【[USACO1.1]坏掉的项链Broken Necklace】

[USACO1.1]坏掉的项链Broken Necklace 22892 破碎的项链 方法一:很容易想到枚举断点,再分别两头找,但是要注意很多细节 #include<iostream> #include<string> #include<cstdio> using namespace std; string s; int n,l,r,ll,rr,tmp,ans; inline int calc(int x) { ll=s[x],rr=s[x+1],l=x-1,r=x+2

AC日记——[USACO1.1]坏掉的项链Broken Necklace 洛谷 P1203

题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A 中的项链可以用下面的字符串表示: brbrrrbbbrrrrrbrrbbrbbbbrrrrb 假如你要在一些点打破项链,展开成一条直线,然后从一端开始收集同颜色的珠子直到你遇到一个不同的颜色珠子,在另一端做同样的事(颜色可能与在这之前收集的不同). 确定应该在哪里打破项链来收集到最大数目的珠子. 例如,在图片

坏掉的项链Broken Necklace

你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A 中的项链可以用下面的字符串表示: brbrrrbbbrrrrrbrrbbrbbbbrrrrb 假如你要在一些点打破项链,展开成一条直线,然后从一端开始收集同颜色的珠子直到你遇到一个不同的颜色珠子,在另一端做同样的事(颜色可能与在这之前收集的不同). 确定应该在哪里打破项链来收集到最大数目的珠子. 例如,在图片 A 中的

USACO 1.1 Broken Necklace

Broken Necklace You have a necklace of N red, white, or blue beads (3<=N<=350) some of which are red, others blue, and others white, arranged at random. Here are two examples for 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

山东德州扒鸡的监视器已经坏掉,在使用旧的视频数据推测我们的时间点,所以算不准啊...哈哈哈

嘿........山东省的,德国后裔......你们最后一个时空显示器是不是坏掉了...... 去成都市北门上城北中学旁边的城隍庙电子市场买一套仪器,请个电子科大的老师来帮你们修嘛.... 既然要当扒鸡,肯定要懂点实在的电子技术啊..... 开源了啊..开源了啊....时空监视器的原理:请大家下载我在博客网的博客里面的所有图片和文章,里面有啊.... 网上最新的大盘交易...就是我们原来在开心网上面玩的模拟炒股呢....整个美国那边都在玩这种模拟股市,华尔街简直没有钱玩了 最新的模拟炒股的对象是

Section1.1 -- Broken Necklace

Broken Necklace You have a necklace of N red, white, or blue beads (3<=N<=350) some of which are red, others blue, and others white, arranged at random. Here are two examples for 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

磁盘坏掉了??关于磁盘被破坏的一些简单修复

关于磁盘被破坏的一些简单修复,不过楼主这里没有条件真正的将磁盘拔出修复,所以采用了现行复制的方法(如果没有备份可以通过相同磁盘的文件来修复) 1.这里我先把磁盘信息做了一个备份在其他机器上,因为没有相同磁盘,就借此演示(不过没有备份也可以修复,后面会有关于没有备份修复的方法) 2.备份完成后破坏掉原来的磁盘 3.进入救援模式(因为磁盘空间已经被破坏,所以在重新启动后根本不需要任何操作便会进入这个页面,因为系统已经默认使用光盘来启动了) 4.在救援模式下我们将被破坏的磁盘部分拷贝回来.(到这里问题