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. 1 2 1 2
  2. r b b r b r r b
  3. r b b b
  4. r r b r
  5. r r w r
  6. b r w w
  7. b b r r
  8. b b b b
  9. b b r b
  10. r r b r
  11. b r r r
  12. b r r r
  13. r r r b
  14. r b r r r w
  15. 图片 A 图片 B
  16.  
  17. r 代表 红色的珠子
  18. b 代表 蓝色的珠子
  19. w 代表 白色的珠子

第一和第二个珠子在图片中已经被作记号。
图片 A 中的项链可以用下面的字符串表示:

  1. brbrrrbbbrrrrrbrrbbrbbbbrrrrb

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

白色珠子什么意思?

在一些项链中还包括白色的珠子(如图片B) 所示。
当收集珠子的时候,一个被遇到的白色珠子可以被当做红色也可以被当做蓝色。
表现含有白珠项链的字符串将会包括三个符号 r , b 和 w 。
写一个程序来确定从一条被给出的项链可以收集到的珠子最大数目。

程序名称

beads

输入格式

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

样例输入

(文件 beads.in)

  1. 29
  2. wwwbbrwrbrbrrbrbrwrwwrbwrwrrb

输出格式

单独的一行 最大可能取得的珠子数

样例输出

(文件 beads.out)

  1. 11

提示

  
 

来源/分类

 
 
 
天哪简直太惨了 这么简单的一道题竟然调了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.  
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int l,r;
  4. char s[];
  5. int check(){
  6. int sum=;
  7. char c;int index=l;
  8. while(s[index]=='w') index++;
  9. c=s[index];
  10. int i;
  11. for(i=l+;i<=r;i++){
  12. if(s[i]==s[i-]||s[i]=='w') sum++;
  13. else if(s[i-]=='w'&&s[i]==c) sum++;
  14. else break;
  15. }
  16. int fanwei=i-;
  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-;i>fanwei;i--) {
  24. if(s[i]==s[i+]||s[i]=='w') sum++;
  25. else if(s[i+]=='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=-;
  34. l=;r=len-;
  35. for(int i=;i<=len;i++)
  36. {
  37. maxn=max(maxn,check());
  38. l++;r++;
  39. s[r]=s[l-];
  40. }
  41. cout<<maxn;
  42. }

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

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

    P1203 [USACO1.1]坏掉的项链Broken Necklace 标签 搜索/枚举 USACO 难度 普及- 题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N&l ...

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

    P1203 [USACO1.1]坏掉的项链Broken Necklace不错的断环为链的模拟题,开成三倍,有很多细节要考虑,比如总长度要<=n,开头第一个是w等等. #include<bi ...

  3. 【P1203】 【USACO1.1】坏掉的项链Broken Necklace

    P1203 [USACO1.1]坏掉的项链Broken Necklace 题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 ...

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

    坏掉的项链Broken Necklace 难度:★ Code: #include <iostream> #include <cstdio> #include <cstri ...

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

    [USACO1.1]坏掉的项链Broken Necklace 22892 破碎的项链 方法一:很容易想到枚举断点,再分别两头找,但是要注意很多细节 #include<iostream> # ...

  6. USACO Training Section 1.1 坏掉的项链Broken Necklace

    题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...

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

    题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...

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

    题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...

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

    题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...

随机推荐

  1. thinkcmf,thinksns,thinkphp,onethink三者是什么关系?

    thinksns 是基于tp的老版本二开的 thinkcmf 是网友基于tp开发的cmf thinkphp 是顶想的框架 onethink 是顶想基于tp开发的cmf 官方目前只有ThinkPHP和O ...

  2. Mail.Ru Cup 2018 Round 2 B. Alice and Hairdresser (bitset<> or 其他)

    传送门 题意: 给出你序列 a,在序列 a 上执行两种操作: ① 0 :查询有多少连续的片段[L,...,R],满足 a[L,...,R] > l: ② 1 p d :将第 p 个数增加 d: ...

  3. 获取 Nuget 版本号

    本文告诉大家通过命令行获取 Nuget 的版本号 在 Nuget 中没有 -version 和 -v 和 --version 等写法,只需要直接输入 nuget 在第一行就会显示版本号 nuget N ...

  4. 基于小米即时消息云服务(MIMC)的Web IM

    michat 一个基于小米即时消息云服务(MIMC)的Web IM. 源码地址github和gitee同步. 截图展示 如何使用 请先双击目录"需要安装的jars"的install ...

  5. H3C 静态聚合配置

  6. linux进程互斥等待

    我们已经见到当一个进程调用 wake_up 在等待队列上, 所有的在这个队列上等待的进程 被置为可运行的. 在许多情况下, 这是正确的做法. 但是, 在别的情况下, 可能提前知道 只有一个被唤醒的进程 ...

  7. linux /proc 接口

    无论何时一个硬件中断到达处理器, 一个内部的计数器递增, 提供了一个方法来检查设备 是否如希望地工作. 报告的中断显示在 /proc/interrupts. 下面的快照取自一个双处理 器 Pentiu ...

  8. js求1到任意数之间的所有质数

    何为质数: 只能被1 和 自身 整除的数; 方法: 利用js中求模, 看是否有余数. ---> 3%2 = 1; 5%2 = 3......... 代码如下: function test (n) ...

  9. vue权限控制菜单显示

    对于不同角色显示不同的菜单 思路1: 本地放一份完整的菜单数据,通过后台返回角色的菜单列表两者对比,筛选需要显示的菜单数据绑定,这里有个问题就是路由vue实例初始化就生成了,加载的全部,人为输入地址是 ...

  10. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(9)之系统登录

    前面我们已经做好了一个文章管理功能模块,接下来,我们回头来做登录窗口,登录不仅涉及到登录验证还涉及到登录日志还有缓存时长等. 对于缓存的相关设置,我们已经写好封装在Bobo.Utilities.dll ...