坏掉的项链Broken Necklace

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

第一和第二个珠子在图片中已经被作记号。

图片 A 中的项链可以用下面的字符串表示:

brbrrrbbbrrrrrbrrbbrbbbbrrrrb

假如你要在一些点打破项链,展开成一条直线,然后从一端开始收集同颜色的珠子直到你遇到一个不同的颜色珠子,在另一端做同样的事(颜色可能与在这之前收集的不同)。 确定应该在哪里打破项链来收集到最大数目的珠子。

例如,在图片 A 中的项链中,在珠子 9 和珠子 10 或珠子 24 和珠子 25 之间打断项链可以收集到8个珠子。

白色珠子什么意思?

在一些项链中还包括白色的珠子(如图片B) 所示。

当收集珠子的时候,一个被遇到的白色珠子可以被当做红色也可以被当做蓝色。

表现含有白珠项链的字符串将会包括三个符号 r , b 和 w 。

写一个程序来确定从一条被给出的项链可以收集到的珠子最大数目。

输入输出格式

输入格式:

第 1 行: N, 珠子的数目

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

输出格式:

输出一行一个整数,表示从给出的项链中可以收集到的珠子的最大数量。

思路:刚开始看到时就想着可以暴力枚举,打表,枚举每次断开在哪里,结果只得了40分,后来看数据才知道n<=350,n=350时必然超时......所以后来我问了老师后换了思路,用模拟的算法来体现摸到红珠子或蓝珠子,白珠子(可红可蓝),继续摸到上一个珠子的颜色的珠子这三种情况,在实时更新ans的值,保证不重不漏。

代码如下(有注释):

#include<bits/stdc++.h>
using namespace std;
char s[700],c;
int a,b,w,ans;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)//输入
cin>>s[i];
memcpy(s+n,s,n);
for(int i=0;i<n<<1;i++)//循环开始!
{
if(s[i]==‘w‘){//如果字母是w(颜色是红色或蓝色)
b++;//所以白蓝数量各加1
w++;
}
else if(s[i]==c){//如果字母是c(当前连续字母)
b++;//蓝色加一
w=0;//白色清零
}
else{//是正常字母(单红或单蓝)
ans=max(ans,a+b);//更新当前最大连续数量
a=b-w;//a,b值更新
b=w+1;
w=0;//白色清零
c=s[i];//当前连续字母更换
}
}
ans=max(ans,a+b);//再次更新ans值
cout<<min(ans,n);//输出
return 0;//完美结束代码
}

原文地址:https://www.cnblogs.com/jr-ag/p/8961654.html

时间: 2024-10-10 04:06:27

坏掉的项链Broken Necklace的相关文章

洛谷 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 坏掉的项链 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

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.在救援模式下我们将被破坏的磁盘部分拷贝回来.(到这里问题

centos出现磁盘坏掉,怎么修复和检测。

当dmesg的时候,出现下面的信息说明磁盘有问题 Info fld=0x139066d0 end_request: I/O error, dev sda, sector 328230608 Buffer I/O error on device sda, logical block 41028826 sd 0:0:0:0: SCSI error: return code = 0x08000002 sda: Current: sense key: Medium Error Add. Sense: U