hdu 4046 BF+树状数组
2011-09-19 18:54
344 查看
题目不难,比赛的时候一读完题目我就知道怎样做了,可是打了一个小时,原因是BF算法居然记不清了,唉,早知道干脆用KMP了。可是打完以后还一直不过,让其它几个队帮我测试,测了一个多小时还是没有找到错误。离比赛结束只有一个小时的时候,让海峰帮我测,终于找到错误,改正就过了。唉,这次比赛的悲剧也就在我,在这题上了吧,花了太多时间。
/* * 2011BeijingG/win.cpp * Created on: 2011-9-18 * Author : ben */ #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; const int MAXN = 50100; const char pattern[10] = { " wbw" }; char str[MAXN]; int N; int array[MAXN]; bool match[MAXN]; inline bool myequals(const char *str1, const char *str2) { if (str1[0] != str2[0]) { return false; } if (str1[1] != str2[1]) { return false; } if (str1[2] != str2[2]) { return false; } return true; } inline int lowbit(int x) { return x & (-x); } int sum(int n) { int ret = 0; for (int i = n; i > 0; i -= lowbit(i)) { ret += array[i]; } return ret; } void update(int index, int value) { for (int i = index; i <= N; i += lowbit(i)) { array[i] += value; } } void mybf() { int i; int len = N; for (i = 1; i < len - 1; i++) { if (str[i] == 'w' && str[i + 1] == 'b' && str[i + 2] == 'w') { update(i + 2, 1); match[i + 2] = true; } } } void work(); int main() { #ifndef ONLINE_JUDGE freopen("data.in", "r", stdin); #endif work(); return 0; } void work() { int T, M, op, a, b; char c; bool flag; scanf("%d", &T); for (int t = 1; t <= T; t++) { printf("Case %d:\n", t); memset(match, 0, sizeof(match)); memset(array, 0, sizeof(array)); scanf("%d%d", &N, &M); if (N > 0) { scanf("%s", &str[1]); } mybf(); while (M--) { scanf("%d", &op); if (op == 0) { scanf("%d%d", &a, &b); if (b - a < 2) { puts("0"); } else { printf("%d\n", sum(b + 1) - sum(a + 2)); } } else { scanf("%d %c", &a, &c); if (str[++a] == c) { continue; } str[a] = c; for (int ii = 0; ii < 3; ii++) { if (a > N) { break; } if (a > 2) { flag = myequals(&str[a - 2], &pattern[1]); if (flag && !match[a]) { update(a, 1); } else if (!flag && match[a]) { update(a, -1); } match[a] = flag; } a++; } } } } }
相关文章推荐
- HDU 4046 Panda(树状数组)
- HDU 4046 Panda (树状数组)
- HDU 4046【树状数组】
- HDU 4046 树状数组
- HDU 4046 Panda [树状数组]【数据结构】
- HDU 4046 Panda 树状数组
- hdu_4046_Panda(树状数组)
- hdu_4046_Panda(树状数组)
- hdu 4046(树状数组)
- HDU(4046)树状数组入门题
- HDU 4325 Flowers(树状数组)
- HDU 4638 Group 【树状数组,分块乱搞(莫队算法?)】
- HDU 3887 Counting Offspring (树状数组)
- HDU 4000 Fruit Ninja 树状数组 + 计数
- 【树状数组】hdu 1541 Stars
- HDU 5293 Annoying problem 树形dp dfs序 树状数组 lca
- hdu 1556 Color the ball(树状数组)
- poj 2352 && hdu 1541 Stars (树状数组水题)
- hdu 3015 Disharmony Trees(树状数组)
- hdu 1166 树状数组 线段树