BIT2014级软件学院程序设计-12 编程珠玑
2016-03-02 15:45
197 查看
你有一条项链,它由 N 个随机排列的红、白和蓝色的珠子组成(3<=N<=350)。下面的例子展示了两条 N=29 时的项链:
项链上的第一个和第二个珠子已经在图中标出了。
图 A 也可以用一个由 b 和 r 组成的字符串直接表示,b 代表蓝色而 r 代表红色,如下所示:brbrrrbbbrrrrrbrrbbrbbbbrrrrb。
假设你想从项链的某处将它截断拉直;接着从一端向另外一端数收集同颜色的珠子,直到碰到一个不同颜色的珠子为止;然后再从另外一端做同样的操作。(一端收集的珠子颜色可以不同于另一端的。)
请想办法找到一个截断项链的位置,能够让我们尽量多地收集到同色的珠子。
图 B 中的项链有白色的珠子,当遇到白色的珠子时,它既可以作为蓝色的珠子看待,也可以作为红色的珠子看待,由收集珠子时的需求决定。包含有白色珠子的项链则会由 r、b 和 w 字符组成的字符串来表示。
请编写一个程序计算从某条项链中能够收集到多少个珠子。
第二行:一个字符串,长度为 N,由 r、b和 w字符组成
wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
暴力
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 Figure A Figure B r red bead b blue bead w white bead
项链上的第一个和第二个珠子已经在图中标出了。
图 A 也可以用一个由 b 和 r 组成的字符串直接表示,b 代表蓝色而 r 代表红色,如下所示:brbrrrbbbrrrrrbrrbbrbbbbrrrrb。
假设你想从项链的某处将它截断拉直;接着从一端向另外一端数收集同颜色的珠子,直到碰到一个不同颜色的珠子为止;然后再从另外一端做同样的操作。(一端收集的珠子颜色可以不同于另一端的。)
请想办法找到一个截断项链的位置,能够让我们尽量多地收集到同色的珠子。
例子
如图 A 中的项链,从第 9 和第 10 个或者第 24 和第 25 个珠子中间截断,则我们可以收集到 8 个珠子。图 B 中的项链有白色的珠子,当遇到白色的珠子时,它既可以作为蓝色的珠子看待,也可以作为红色的珠子看待,由收集珠子时的需求决定。包含有白色珠子的项链则会由 r、b 和 w 字符组成的字符串来表示。
请编写一个程序计算从某条项链中能够收集到多少个珠子。
输入
第一行: N,项链上珠子的个数第二行:一个字符串,长度为 N,由 r、b和 w字符组成
输出
输出一行字符,它应该包含了计算出的结果。输入样例
29wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
输出样例
11暴力
#include<stdio.h> #include<string.h> int n, i, j; char ch[400]; int vis[400]; int main() { freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); int max = 0,ans; int st; char c ; while(scanf("%d", &n)!=EOF){ memset(ch,0,sizeof(ch)); max=0; scanf("%s", ch); for(i=0;i<n;i++) { ans=0; memset(vis,0,sizeof(vis)); st=i-1; if(st<0) st+=n; if(ch[st]=='w') c=0; else c=ch[st]; for(j=i-1;;j--) { if(j<0) j=j+n; if(c==0&&ch[j]!='w') c=ch[j]; if(ch[j]!=c&&ch[j]!='w'&&c) break; if(vis[j]) break; vis[j]=1; } st=i; if(ch[st]=='w') c=0; else c=ch[st]; for(j=i;;j++) { if(j>=n) j=j-n; if(c==0&&ch[j]!='w') c=ch[j]; if(ch[j]!=c&&ch[j]!='w'&&c) break; if(vis[j]) break; vis[j]=1; } for(j=0;j<n;j++) { if(vis[j]) ans++; } if(ans>max) max=ans; } printf("%d\n", max); } }
相关文章推荐
- Qt程序发布
- Python根据经纬度求两点间距离
- C++第一次实验1-1
- c++第一次实验
- Mongo读书笔记2 -- 数据类型
- JVM的内存区域划分
- Maven-SpringMVC工程
- c++上机报告
- java常用设计模式
- Java核心技术(第8版)学习笔记_接口与内部类
- Python的线程池化
- c++第一次实验(复习)
- SPRING IN ACTION 第4版笔记-第三章Advancing wiring-001-DataSource在应用和开发环境之间切换 profile
- SSH之Java.lang.Exception: Socket bind failed:
- PHP查看文件修改时间
- php设计模式 数据对象映射模式
- C++实验1-复习
- 【python】编程语言入门经典100例--17
- c++实验报告 求三角形面积
- c++第一次实验