usaco 1-1-4 Broken Necklace
来源:互联网 发布:linux查看tcp连接ip 编辑:程序博客网 时间:2024/06/06 05:43
usaco 持续更新中
nocow友情翻译
Broken Necklace 坏掉的项链
目录
[隐藏]- 1 描述
- 2 格式
- 3 样例输入
- 4 样例输出
描述
你有一条由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 。
写一个程序来确定从一条被给出的项链可以收集到的珠子最大数目。
格式
PROGRAM NAME: beads
INPUT FORMAT:
(file beads.in)
- 第 1 行: N, 珠子的数目
- 第 2 行: 一串长度为N的字符串, 每个字符是 r , b 或 w。
OUTPUT FORMAT:
(file beads.out)
单独的一行 最大可能取得的珠子数。
样例输入
29 wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
样例输出
11
分析:这个比较难搞,因为他的首尾相连,st(本人)采用每次都将第一颗放到最后一个的做法
解释代码:
/*ID:jwb11931LANG:CTASK:beads*/#include<stdio.h>#include<string.h>int max,al,i,j,sum,p[400],p1[400];char a[750],flag,flag1;int main(){freopen("beads.in","r",stdin);freopen("beads.out","w",stdout);scanf("%d",&al);getchar();scanf("%s",a);max=0;for(i=0;i<al;i++){//这里相当于将每种情况枚举,也就是从哪里断开sum=0;for(j=0;j<al;j++){p[j]=0;p1[j]=0;}if(i!=0)a[al+i-1]=a[i-1];//当前首珠放末尾flag='w';flag1='w';for(j=i;j<=al+i-1;j++){//开始对每一颗珠子不同颜色进行处理(下面凑合着看吧。。。)if(a[j]==flag||a[j]=='w' ){//如果珠子为第一颗珠子的颜色即flag或为白,标记if(j>=al)p[j-al]=1;else p[j]=1;}else {if(flag=='w'){//如果颜色还是默认的,证明这是第一颗珠,flag置为他的颜色且标记flag=a[j];if(j>=al)p[j-al]=1;else p[j]=1;}else break;}}for(j=al+i-1;j>=i;j--){//同时对末端开始处理,方法同上(现在知道我为何用数组标记吧,去重)if(a[j]==flag1||a[j]=='w'){if(j>=al)p1[j-al]=1;else p1[j]=1;}else{ if(flag1=='w'){flag1=a[j];if(j>=al)p1[j-al]=1;else p1[j]=1;}else break;}}for(j=0;j<al;j++){if(p[j]+p1[j]>0)sum++;}if(sum>max)max=sum;}printf("%d\n",max);return 0;}
/*ID:LANG:CTASK:beads*/#include<stdio.h>#include<string.h>int max,al,i,j,sum,p[400],p1[400];char a[750],flag,flag1;int main(){freopen("beads.in","r",stdin);freopen("beads.out","w",stdout);scanf("%d",&al);getchar();scanf("%s",a);max=0;for(i=0;i<al;i++){sum=0;for(j=0;j<al;j++){p[j]=0;p1[j]=0;}if(i!=0)a[al+i-1]=a[i-1];flag='w';flag1='w';for(j=i;j<=al+i-1;j++){if(a[j]==flag||a[j]=='w' ){if(j>=al)p[j-al]=1;else p[j]=1;}else {if(flag=='w'){flag=a[j];if(j>=al)p[j-al]=1;else p[j]=1;}else break;}}for(j=al+i-1;j>=i;j--){if(a[j]==flag1||a[j]=='w'){if(j>=al)p1[j-al]=1;else p1[j]=1;}else{ if(flag1=='w'){flag1=a[j];if(j>=al)p1[j-al]=1;else p1[j]=1;}else break;}}for(j=0;j<al;j++){if(p[j]+p1[j]>0)sum++;}if(sum>max)max=sum;}printf("%d\n",max);return 0;}
看在我如此认真的份上,真心求赞求访问求评论!!!
1 0
- usaco 1-1-4 Broken Necklace
- USACO--Section1.1--Broken Necklace
- USACO-Section1.1 Broken Necklace
- USACO-Section1.1 Broken Necklace
- USACO-Section1.1 Broken Necklace
- USACO-Section1.1 Broken Necklace[...]
- USACO Section1.1 Broken Necklace
- USACO-Section1.1 Broken Necklace [动态规划]
- USACO 1.1.4 Broken Necklace
- USACO 1.1.4 Broken Necklace
- [USACO 1.1.4] Broken Necklace
- USACO 1.1.4 Broken Necklace
- USACO 1.1.4 Broken Necklace
- USACO 1.1.4 Broken Necklace
- USACO-1.1.4 Broken necklace
- USACO-Section1.1 Broken Necklace【记忆化搜索】
- USACO 1.1.4 Broken Necklace(beads)
- USACO 1.1.4 Broken Necklace(模拟)
- String、StringBuilder、StringBuffer的区别
- js中arguments用法
- 蓝桥杯vip试题 龟兔赛跑
- 敏感词系统的设计思路
- V-Play 文档翻译 PullToRefreshHandler
- usaco 1-1-4 Broken Necklace
- Android开发之关闭多个Activity
- 开始linux之路
- 数组遍历的三种方式
- 1031. 查验身份证(15)
- Python sklearn包——mnist数据集下不同分类器的性能实验
- HDU1007(分治算法)
- 用 Pelican 和 github 打造你的个人主页
- 即时通讯技术简介