usaco/ 1.1 Broken Necklace
2013-06-03 20:53
399 查看
原题:http://cerberus.delos.com:790/usacoprob2?a=faHW39gatm8&S=beads
注意全是白珠子,全是红珠子,以及连续红蓝珠子串中白珠子被重复计算等特殊情况。
/* ID: chicc991 PROG: beads LANG: C++ */ #include <fstream> //#include <iostream> using namespace std; ifstream fin("beads.in"); ofstream fout("beads.out"); int n;//项链珠子数 char s[350];//代表珠子的数组 int bead(); int main() { fin>>n; //cout<<n<<endl; fin>>s; fout<<bead()<<endl; return 0; } int bead() { int b ; int max=0; int x=0;//保存w的个数,全是w时跳出循环 for(int i=0; i<n; i++) { b[i]=s[i]; } for(int i=0; i<n; i++) { int j=0; int m=0; int h=0; int k=1; if(i!=n-1) m=i+1; if(i!=0) h=i-1; else h=n; //if((b[i]=='w')||(b[h]=='w')||(b[m]=='w')) if(b[i]=='w')//全是w则跳出循环,否则结束本次循环 { x++; if(x==n) { max=n; break; } continue; } while(b[i] != b[m]) { if(m==n-1) m=-1; j++; m++; 4000 } while((b[h]=='w')||(b[i] == b[h])) { if(h==0) h=n; k++; h--; if(k==n)//如果全是红珠子或者蓝珠子,结束循环 { max=n; break; } } if(max<(j+k)) max=j+k; if(max>n)//有可能算了2次白珠子,个数最多为总珠子数量 max=n; //cout<<i<<" "<<"j="<<j<<" "<<"k="<<k<<endl; } return max; }
注意全是白珠子,全是红珠子,以及连续红蓝珠子串中白珠子被重复计算等特殊情况。
相关文章推荐
- USACO 1.1 Broken Necklace
- USACO Section 1.1 : Broken Necklace
- 【P1203】 【USACO1.1】坏掉的项链Broken Necklace
- 【搜索】洛谷 P1203 [USACO1.1]坏掉的项链Broken Necklace
- USACO Section1.1 Broken Necklace
- usaco 1.1 Broken Necklace(DP)
- USACO 1.1 Broken Necklace (beads)
- USACO1.1 Broken Necklace 比较分析
- [USACO1.1]坏掉的项链Broken Necklace
- 【P1203】 【USACO1.1】坏掉的项链Broken Necklace
- USACO 1.1 broken necklace 分析
- Section 1.1 Broken Necklace
- 1.1 Broken Necklace
- 洛谷 P1203 [USACO1.1]坏掉的项链Broken Necklace
- Section 1.1 Broken Necklace
- USCAO-Section1.1 Broken Necklace(DP版)
- P1203 [USACO1.1]坏掉的项链Broken Necklace
- 洛谷 P1203 [USACO1.1]坏掉的项链Broken Necklace
- usaco 1.1:Broken Necklace
- USACO 1.1 Broken Necklace