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

P1203 [USACO1.1]坏掉的项链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。

输出格式:

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

输入输出样例

输入样例#1:

29
wwwbbrwrbrbrrbrbrwrwwrbwrwrrb

输出样例#1:

11

说明

题目翻译来自NOCOW。

USACO Training Section 1.1

分析:

直接暴力搜索,O(n*n),复制成3份,从中间段开始搜。

枚举中间所有点。

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 string a;
 5 int f(int x)
 6 {
 7     int s=0;
 8     char a1=a[x];
 9     //加上自己,多一次
10     char b2=a[x+1];
11     //往前搜
12     for(int i=x;;i--)
13     {
14         if(a[i]==a1)s++;
15         else if(a[i]==‘w‘)
16             s++;
17         else
18             break;
19     }
20     //往后搜
21     for(int i=x+1;;i++)
22     {
23         if(a[i]==b2)s++;
24         else if(a[i]==‘w‘)
25             s++;
26         else
27             break;
28     }
29     return s;
30 }
31 int main()
32 {
33     int ans,n;
34     ans=-1;
35     cin>>n;cin>>a;
36     a=a+a+a;
37     for(int i=n;i<2*n;i++)//三段 从中间那一段开始处理
38     {
39         //相同不拆
40         if(a[i]==a[i+1])
41             continue;
42         if(a[i]==‘w‘)//如果是白色,分颜色进行搜索
43         {
44             //当成红色
45             a[i]=‘r‘;
46             ans=max(ans,f(i));
47             //当成蓝色
48             a[i]=‘b‘;
49             ans=max(ans,f(i));
50             //还原成白色
51             a[i]=‘w‘;
52         }
53         //如果是其它颜色,直接进行搜索
54         ans=max(ans,f(i));
55     }
56     ans=min(ans,n);//最长也不能比总长长
57     if(ans==-1)ans=n;//出现这种情况必定是一路continue过来的
58     cout<<ans<<endl;
59     return 0;
60 }
时间: 2024-10-20 12:02:16

P1203 [USACO1.1]坏掉的项链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】

[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 中的

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

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

关于磁盘被破坏的一些简单修复,不过楼主这里没有条件真正的将磁盘拔出修复,所以采用了现行复制的方法(如果没有备份可以通过相同磁盘的文件来修复) 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

Ambari 节点坏掉不要的节点 无法删除解决方法

1.配置一台和坏掉的节点一样的ip和 hostname 2.安装ntp服务(根据自己时间同步方案安装情况而定) 使时间同步 3.安装 ambari-agent 可以去我共享了一个地址下载: https://pan.baidu.com/s/1bpi46Hh 密码: 3p2b rpm -ivh ambari-agent-2.4.2.0-136.x86_64.rpm #安装完成后 手动修改配置文件 配置 agent-server所在地址 vi /etc/ambari-agent/conf/ambari

数据库硬盘坏掉!!!

在这里,给大家做个警示,数据库硬盘硬盘,尽量做RAID或其他磁盘阵列! 环境:win server 2008 Enterprise 64位.硬盘:SSD(系统盘)+ 2T(数据盘) 出现的问题:2T数据盘,一会在系统中显示,一会又不显示,一会又显示.根本就没法用了(硬盘中的数据都在!). 解决方法:1.重 启系统,不管用2.把2T的数据盘,插在另一台机器上,还是出现相同的症状.猜想可能数据库硬盘由于大量的IO操作,导致硬盘出现问题.3.在另一台服务器上,把前几天的备份(bak文件)导入到另一个数