USACO基础第三题Broken Necklace
2011-02-18 18:18
411 查看
做完第三题发现USACO真是个好地方,推荐acm没有入门的同学上去刷通关,据说大牛的一个月就通关,一般就得四五个月。我觉得usaco最好的一个地方就是会给测试数据,错误会有一些提示什么的,而且怎么提交也没人管,虽然多次提交这习惯不好,但是可能很多人还不是熟悉文件的操作。
/* ID: like_091 PROG: beads LANG: C++ */ #include<iostream> #include<fstream> #include<string> using namespace std; const short MAX = 1000; char s[MAX]; int prv[MAX], nex[MAX], v[MAX]; void change(int n) { short i; //预处理 for (i = 1; i <= n; i++) { if (i == 1)prv[i] = n; else prv[i] = i - 1; } for (i = 1; i <= n; i++) { if (i == n)nex[i] = 1; else nex[i] = i + 1; } } int fun(int x, int n) { int i = x, j = prv[x], sum; short l; for (l = 1; l <= n; l++) v[l] = 0;//标记状态数组 sum = tot = 0; while (!v[i] && s[i] == 'w') { sum++; v[i] = 1; i = nex[i]; } char temp = s[i]; while (!v[i] && (s[i] == temp || s[i] == 'w')) { sum++; v[i] = 1; i = nex[i]; } while (!v[j] && s[j] == 'w') { sum++; v[j] = 1; j = prv[j]; } temp = s[j]; while (!v[j] && (s[j] == temp || s[j] == 'w')) { sum++; v[j] = 1; j = prv[j]; } return sum; } int main(void) { ifstream cin("beads.in"); ofstream cout("beads.out"); short n, i; while (cin>>n) { int m = -1; for (i = 1; i <= n; i++) cin>>s[i];//每次输入一个字符 change(n); for (int i = 1; i <= n; i++) if (m < fun(i, n)) m = fun(i, n); cout<<m<<endl; } return 0; }
相关文章推荐
- USACO1.1 Broken Necklace 比较分析
- USACO 1.1 - Broken Necklace(杂题)
- usaco 1.1 Broken Necklace
- USACO-Section1.1 Broken Necklace [动态规划]
- USACO 1.2 Broken Necklace
- P1203 [USACO1.1]坏掉的项链Broken Necklace
- USACO Broken Necklace
- USACO TRAINING - PROB Broken Necklace
- USACO-1.1.4 Broken necklace
- Broken Necklace(USACO官方)
- USACO Section1.1PROB Broken Necklace
- USACO天梯--Broken Necklace
- USACO 1.1 Broken Necklace
- usaco Broken Necklace字符串
- USACO1.1.4 - Broken Necklace
- Broken Necklace(USACO官方)
- 洛谷 1203 [USACO1.1]坏掉的项链Broken Necklace
- USACO_Broken Necklace解题报告
- Broken Necklace-----破碎的项链----USACO---C1S1
- USACO Section 1.1.7 Broken Necklace