USACO 1.2 Broken Necklace
2018-03-24 20:52
239 查看
USACO 1.2 Broken Necklace
题目
见落谷分析
这是第一道开始有点麻烦的USACO的题目。朴素的想法是模拟数珠子的过程,遍历一边就可以得到最终答案了,但是有几个坑要考虑好(好像USACO本身设计的案例还是很简单的),比如全白珠子,或是重叠数了白珠子。看了官方解
还有dp的解法,真是orz,先上个人的解,有时间再研究一下官方的。
代码
注释处是debug检查用的/* PROG:beads ID:imking022 LANG:C++ */ #include <iostream> #include <cstdio> #include <fstream> #include <cstring> #include <cstdlib> using namespace std; int main(void){ ofstream fout("beads.out"); ifstream fin("beads.in"); int n; fin>>n; char *cot = (char *) malloc(n*sizeof(char)); for(int i=0;i<n;i++) fin>>cot[i]; int sum, lsum, rsum; sum = 0; int be,cur; char be_bar, cur_bar; for(int i=0;i<n;i++){ lsum = rsum = 0; be = (i-1+n)%n; cur = i; // fout<< be<<" "<<cur<<endl; be_bar = cot[be]; while(be_bar == 'w'){ // fout<<be_bar<<" "; be = ((--be)+n)%n; be_bar = cot[be]; lsum++; if(lsum == n){ fout<<n<<endl; return 0; } } while(cot[be]==be_bar || cot[be]=='w' ){ // fout<<cot[be]<<" "; be = ((--be)+n)%n; lsum++; if(lsum == n){ fout<<n<<endl; return 0; } } // fout<<endl; cur_bar = cot[cur]; while(cur_bar == 'w'){ // fout<<cur_bar<<" "; cur = ((++cur)+n)%n; cur_bar = cot[cur]; rsum++; if(rsum == n){ fout<<n<<endl; return 0; } } while(cot[cur]==cur_bar || cot[cur]=='w' ){ // fout<<cot[cur]<<" "; cur = ((++cur)+n)%n; rsum++; if(rsum == n){ fout<<n<<endl; return 0; } } sum = (rsum+lsum > sum ? rsum+lsum : sum) ; } sum = sum>n? n : sum; fout<<sum<<endl; return 0; }
相关文章推荐
- usaco Section1.1 Broken Necklace
- USACO-Section1.1 Broken Necklace【记忆化搜索】
- USACO天梯--Broken Necklace
- USACO-Section1.1 Broken Necklace
- USACO_1_1_Broken Necklace
- usaco 1-1-4 Broken Necklace
- 【USACO1.1】Broken Necklace
- USACO Broken Necklace
- USACO 1.1.4 - Broken Necklace(DP)
- USACO1.1.4 Broken Necklace(破碎的项链)
- usaco 1.1 Broken Necklace
- USACO 1.1.4 Broken Necklace
- USACO1.1 Broken Necklace 比较分析
- Broken Necklace(USACO)
- USACO基础第三题Broken Necklace
- USACO 1.1 - Broken Necklace(杂题)
- USACO1.1.4--Broken Necklace
- P1203 [USACO1.1]坏掉的项链Broken Necklace
- Broken Necklace(USACO)
- [USACO] Broken Necklace