USACO 1.1.4 Broken Necklace
2012-02-20 20:21
375 查看
模拟题,遍历项链,选择断点,然后双向搜索,应该注意项链是循环的,为了避免重复搜索,用vis数组来标记搜索过的珠子。每次记录最大可以收集的珠子数,与最大值做比较。本题要注意断点为w时的处理方法,特殊地,当珠子全为w时,输出n(即项链长度)。
代码如下:
代码如下:
/* ID: michael139 LANG: C PROG: beads */ #include<stdio.h> #include<string.h> int main () { FILE *fin = fopen ("beads.in", "r"); FILE *fout = fopen ("beads.out", "w"); int n,i,j,max,cur,ok,x,vis[1010]; char s[1010],c; while (fscanf(fin,"%d",&n)!=EOF) { fscanf(fin,"%s",s); max = 0; ok = 1; for (i=0;i<n;i++) { memset(vis,0,sizeof(vis)); c = s[i]; cur = 1; vis[i] = 1; for (j=(i+1)%n;cur<n;j++) { j %= n; while (c=='w') { c = s[j]; cur ++; vis[j] = 1; j++; j = j%n; if (cur>=n) { ok = 0; break; } } if (!vis[j] && (s[j]==c)||(s[j]=='w')) { cur ++; vis[j] = 1; } else break; } c = s[(n+i-1)%n]; if (ok) for (j=(n+i-1)%n;cur<n;j--) { j %= n; while (c=='w') { c = s[j]; cur ++; vis[j] = 1; j++; j = j%n; if (cur>=n) { ok = 0; break; } } if (!vis[j] && (s[j]==c)||(s[j]=='w')) { cur ++; vis[j] = 1; } else break; } if (max<cur) { max = cur; x = i; } } fprintf(fout,"%d\n",ok?max:n); } return 0; }
相关文章推荐
- USACO之Section1.1.4 Broken Necklace
- USACO1.1.4 Broken Necklace 破碎的项链
- USACO1.1.4 Broken Necklace(破碎的项链)
- Usaco 1.1.4 破碎的项链(Broken Necklace)
- USACO1.1.4--Broken Necklace
- USACO1.1.4 Broken Necklace (beads)
- 【USACO题库】1.1.4 Broken Necklace破碎的项链
- USACO1.1.4 Broken Necklace (beads)
- 【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
- usaco1.1.4 Broken Necklace 题解
- usaco1.1.4 Broken Necklace破碎的项链
- USACO1.1.4 - Broken Necklace
- USACO 1.1.4 Broken Necklace
- [USACO1.1.4]坏掉的项链Broken Necklace
- USACO 1.1.4 - Broken Necklace(DP)
- USACO 1.1.4 Broken Necklace(beads)