【ZOJ3957 The 17th Zhejiang University Programming Contest J】【水题】Knuth-Morris-Pratt Algorithm
2017-04-13 10:32
573 查看
Knuth-Morris-Pratt Algorithm
Time Limit: 1 Second Memory Limit: 65536 KB
In computer science, the Knuth-Morris-Pratt string searching algorithm (or KMP algorithm) searches for occurrences of a "word" W within a main "text string" S by
employing the observation that when a mismatch occurs, the word itself embodies sufficient information to determine where the next match could begin, thus bypassing re-examination of previously matched characters.
Edward is a fan of mathematics. He just learnt the Knuth-Morris-Pratt algorithm and decides to give the following problem a try:
Find the total number of occurrence of the strings "cat" and "dog" in a given string s.
As Edward is not familiar with the KMP algorithm, he turns to you for help. Can you help Edward to solve this problem?
The first line contains a string s (1 ≤ |s| ≤ 1000).
For the second test case, there is only 1 "cat" and no "dog" in the string, so the answer is 1.
Author: WANG, Yucheng
Source: The 17th Zhejiang University Programming Contest Sponsored by TuSimple
Time Limit: 1 Second Memory Limit: 65536 KB
In computer science, the Knuth-Morris-Pratt string searching algorithm (or KMP algorithm) searches for occurrences of a "word" W within a main "text string" S by
employing the observation that when a mismatch occurs, the word itself embodies sufficient information to determine where the next match could begin, thus bypassing re-examination of previously matched characters.
Edward is a fan of mathematics. He just learnt the Knuth-Morris-Pratt algorithm and decides to give the following problem a try:
Find the total number of occurrence of the strings "cat" and "dog" in a given string s.
As Edward is not familiar with the KMP algorithm, he turns to you for help. Can you help Edward to solve this problem?
Input
There are multiple test cases. The first line of input contains an integer T (1 ≤ T ≤ 30), indicating the number of test cases. For each test case:The first line contains a string s (1 ≤ |s| ≤ 1000).
Output
For each case, you should output one integer, indicating the total number of occurrence of "cat" and "dog" in the string.Sample Input
7 catcatcatdogggy docadosfascat dogdddcat catcatcatcatccat dogdogdogddddooog dcoagtcat doogdog
Sample Output
4 1 2 5 3 1 1
Hint
For the first test case, there are 3 "cat" and 1 "dog" in the string, so the answer is 4.For the second test case, there is only 1 "cat" and no "dog" in the string, so the answer is 1.
Author: WANG, Yucheng
Source: The 17th Zhejiang University Programming Contest Sponsored by TuSimple
#include<stdio.h> #include<iostream> #include<string.h> #include<string> #include<ctype.h> #include<math.h> #include<set> #include<map> #include<vector> #include<queue> #include<bitset> #include<algorithm> #include<time.h> using namespace std; void fre() { freopen("c://test//input.in", "r", stdin); freopen("c://test//output.out", "w", stdout); } #define MS(x, y) memset(x, y, sizeof(x)) #define ls o<<1 #define rs o<<1|1 typedef long long LL; typedef unsigned long long UL; typedef unsigned int UI; template <class T1, class T2>inline void gmax(T1 &a, T2 b) { if (b > a)a = b; } template <class T1, class T2>inline void gmin(T1 &a, T2 b) { if (b < a)a = b; } const int N = 1010, M = 0, Z = 1e9 + 7, inf = 0x3f3f3f3f; template <class T1, class T2>inline void gadd(T1 &a, T2 b) { a = (a + b) % Z; } int casenum, casei; int x, y, a, b; char s ; void solve() { scanf("%s", s); int n = strlen(s); int ans = 0; for (int i = 0; i < n - 2; ++i) { if (s[i] == 'c' && s[i + 1] == 'a' && s[i + 2] == 't') ++ans; if (s[i] == 'd' && s[i + 1] == 'o' && s[i + 2] == 'g') ++ans; } printf("%d\n", ans); } int main() { scanf("%d", &casenum); for (casei = 1; casei <= casenum; ++casei) { solve(); } return 0; }
相关文章推荐
- 【ZOJ3951 The 17th Zhejiang University Programming Contest D】【树形DP 合并思想 复杂度计算】Independent Set 构造树使得不同
- The 10th Zhejiang Provincial Collegiate Programming Contest 蒻菜的水题题解。
- 【ZOJ3948 The 17th Zhejiang University Programming Contest A】【暴力 or 讨论】Marjar Cola 瓶盖饮料换可乐
- The 10th Zhejiang Provincial Collegiate Programming Contest 蒻菜的水题题解。
- 【ZOJ3949 The 17th Zhejiang University Programming Contest B】【树形DP】Edge to the Root 树上加一边 根距离之和尽可能小
- 【ZOJ3952 The 17th Zhejiang University Programming Contest E】【简单构造 模拟 or汇编】Fibonacci Sequence Chicken
- 【ZOJ3950 The 17th Zhejiang University Programming Contest C】【简单日期模拟】How Many Nines 区间9个数计数
- 【ZOJ3954 The 17th Zhejiang University Programming Contest G】【预处理 哈希 二分】Seven-Segment Display 矩阵列全排列的
- 【ZOJ3955 The 17th Zhejiang University Programming Contest H】【二分 贡献计数】Saddle Point 鞍点贡献
- 【ZOJ3956 The 17th Zhejiang University Programming Contest I】【01背包】Course Selection System 公式最大化
- The 17th Zhejiang University Programming Contest Sponsored by TuSimple 浙大校赛C题 How Many Nines
- ZOJ 17届校赛 Knuth-Morris-Pratt Algorithm( 水题)
- The 17th Zhejiang University Programming Contest(solved 8 of 10)
- The 17th Zhejiang University Programming Contest Sponsored by TuSimple A
- 【ZOJ3932 The 16th Zhejiang University Programming ContestF】【水题】Handshakes 每人与之前认识的人握手 最大可能认识人数
- 【ZOJ3953 The 17th Zhejiang University Programming Contest F】【贪心 or 费用流】Intervals 删最少线段使得每点最多2次覆盖
- The 17th Zhejiang University Programming Contest Sponsored by TuSimple J
- The 2012 8th Hunan University Programming Contest 水题
- 115 - The 12th Zhejiang University Programming Contest - C
- CodeForces-2015 HIAST Collegiate Programming Contest-Gym-100952A-Who is the winner?