USACO之Section1.1.4 Broken Necklace
2017-05-28 18:24
435 查看
【题意】一串项链,仅有r,w,b三种颜色组成,从某个位置断开,在断开处分别向左向右取珠子,求最多取出多少个珠子?关键点:左右两边连续取同一种颜色的珠子;w可以视为任何色。
【输入】N
只包含r,w,b的字符串。
【输出】一个整数,表示最多取出的珠子数。
【分析】我用暴力分析每个断点,主要的容易错误的地方是:当断点是w时,要仔细的分析。
【输入】N
只包含r,w,b的字符串。
【输出】一个整数,表示最多取出的珠子数。
【分析】我用暴力分析每个断点,主要的容易错误的地方是:当断点是w时,要仔细的分析。
/* ID:m1519591 PROG:beads LANG:C++ */ #include<iostream> #include<fstream> #include<string> using namespace std; int main() { ofstream cout("beads.out"); ifstream cin("beads.in"); int n; string str; cin>>n>>str; str+=str; int fro,end; int lef=0; int rig=0; int ans=0; char fro0; char end0; int flag=1; for(int i=0;i<=n-1;i++) { fro=i; end=i+n-1; lef=0; rig=0; for(int j=fro;j<=end;j++) { if(str[j]!='w'&&flag==1) //flag标记是否是第一个访问的点,即是否是断点 { fro0=str[j]; //记住断点的颜色 } if(str[j]=='w'&&flag==1) //断点是白色时,加到右端长度中 { rig++; } else { flag=0; if(str[j]!=fro0&&str[j]!='w') break; rig++; } } flag=1; for(int j=end;j>=fro;j--) { if(str[j]!='w'&&flag==1) end0=str[j]; if(str[j]=='w'&&flag==1) { lef++; } else { flag=0; if(str[j]!=end0&&str[j]!='w') break; lef++; } } if(lef+rig>=n) ans=n; else ans=max(ans,lef+rig); } cout<<ans<<endl; return 0; }
相关文章推荐
- USACO Section1.1PROB Broken Necklace
- USACO-Section1.1 Broken Necklace
- USACO 1.1.4 Broken Necklace
- Usaco 1.1.4 破碎的项链(Broken Necklace)
- USACO1.1.4 Broken Necklace (beads)
- USACO 1.1.4 Broken Necklace
- USACO Section 1.1 Broken Necklace
- USACO1.1.4 - Broken Necklace
- USACO-Section1.1 Broken Necklace [动态规划]
- USACO - Chapter1 Section 1.1 - Broken Necklace
- USACO-Section1.1 Broken Necklace
- USACO 1.1.4 Broken Necklace(beads)
- USACO Section 1.1 Broken Necklace 解题报告
- USACO1.1.4 Broken Necklace 破碎的项链
- USACO1.1.4 Broken Necklace(破碎的项链)
- [USACO1.1.4]坏掉的项链Broken Necklace
- USACO1.1.4--Broken Necklace
- usaco Section1.1 Broken Necklace
- 【USACO题库】1.1.4 Broken Necklace破碎的项链
- 【USACO题库】1.1.4 Broken Necklace破碎的项链