USACO1.1.4 Broken Necklace (beads)
2014-12-10 08:06
489 查看
很恶心的模拟题。每个点向左向右分别扫一次,加起来的长度就是答案。如果长度>l,那么答案就是l。
每次向左或者向右扫时,记录下第一个非'w'的颜色,然后遇到不同的非'w'的颜色就终止。
我把原来的数组扩大成了3倍,如果滚动着扫也可以,但要注意长度大于l的时候就要终止。
每次向左或者向右扫时,记录下第一个非'w'的颜色,然后遇到不同的非'w'的颜色就终止。
我把原来的数组扩大成了3倍,如果滚动着扫也可以,但要注意长度大于l的时候就要终止。
/* ID:shijiey1 PROG:beads LANG:C++ */ #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n; char str[2000]; int maxans = 0; int main() { freopen("beads.in", "r", stdin); freopen("beads.out", "w", stdout); scanf("%d\n", &n); scanf("%s", str); for (int i = 0; i < n; i++) { str[i + n] = str[i]; str[i + n + n] = str[i]; } for (int i = n; i < n * 2; i++) { int cnt1 = 0, cnt2 = 0; char temp; bool flag = false; for (int j = 1; j <= n; j++) { if (!flag) { if (str[i - j] != 'w') { temp = str[i - j]; flag = true; } } else { if (str[i - j] != temp && str[i - j] != 'w') { break; } } cnt1++; } flag = false; for (int j = 0; j < n; j++) { if (!flag) { if (str[i + j] != 'w') { temp = str[i + j]; flag = true; } } else { if (str[i + j] != temp && str[i + j] != 'w') { break; } } cnt2++; } int ans = min(n, cnt1 + cnt2); maxans = max(ans, maxans); } printf("%d\n", maxans); return 0; }
相关文章推荐
- USACO1.1.4 Broken Necklace (beads)
- USACO 1.1.4 Broken Necklace(beads)
- 【USACO题库】1.1.4 Broken Necklace破碎的项链
- USACO 1.1 Broken Necklace (beads)
- USACO1.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 题解
- USACO1.1.4--Broken Necklace
- USACO 1.1.4 - Broken Necklace(DP)
- usaco1.1.4 Broken Necklace破碎的项链
- USACO1.1.4 Broken Necklace 破碎的项链
- USACO-1.1.4 Broken necklace
- USACO之Section1.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
- Usaco 1.1.4 破碎的项链(Broken Necklace)