hdoj 2087 剪花布条(kmp)
2016-10-08 13:49
281 查看
题意:给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
kmp模板题,数据很弱,暴力也能过。
kmp代码:
暴力代码:
kmp模板题,数据很弱,暴力也能过。
kmp代码:
#include<bits/stdc++.h> using namespace std; const int maxn = 1005; char s[maxn], t[maxn]; int Next[maxn], ans; void makeNext(void) { int len = strlen(s); Next[0] = Next[1] = 0; for(int i = 1; i < len; i++) { int j = Next[i]; while(j && s[i] != s[j]) j = Next[j]; Next[i+1] = s[i]==s[j] ? j+1 : 0; } } void kmp(void) { int len1 = strlen(s); int len2 = strlen(t); int i, j = 0; for(int i = 0; i < len1; i++) { while(j && s[i] != t[j]) j = Next[j]; if(s[i] == t[j]) j++; if(j == len2) ans++, j = 0; } } int main(void) { while(~scanf(" %s", s)) { if(strlen(s) == 1 && s[0] == '#') break; scanf(" %s", t); ans = 0; makeNext(); kmp(); printf("%d\n", ans); } return 0; }
暴力代码:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn = 1005; char str[maxn], tstr[maxn]; int main(void) { while(~scanf(" %s", str)) { if(strlen(str) == 1 && str[0] == '#') break; scanf(" %s", tstr); int len1 = strlen(str); int len2 = strlen(tstr); int ans = 0; for(int i = 0; i < len1; i++) { if(str[i] == tstr[0]) { int j; for(j = 0; i+j < len1 && j < len2; j++) if(tstr[j] != str[i+j]) break; if(j >= len2) ans++, i = i+j-1; } } printf("%d\n", ans); } return 0; }
相关文章推荐
- HDOJ 2087 剪花布条(KMP)
- HDOJ 2087 剪花布条【KMP】
- hdoj-2087 剪花布条(Kmp)
- 【hdu 2087】剪花布条(kmp)
- HDU 2087 剪花布条(第一道KMP题)
- HDU 2087(剪花布条)字符串匹-KMP
- HDU-2087 剪花布条(kmp)
- HDU - 2087 剪花布条(KMP)
- [HDU - 2087] 剪花布条(KMP)
- HDU:2087 剪花布条(KMP)
- HDU 2087 剪花布条(KMP水题)
- HDU 2087 剪花布条(KMP)
- hdu 2087-剪花布条(KMP)
- 【HDU-2087-剪花布条】(KMP)
- HDU 2087 剪花布条(kmp模板)
- hdu 2087 剪花布条(KMP)
- HDU - 2087 - 剪花布条(kmp)
- hdu 2087 剪花布条(KMP)
- hdu 2087 剪花布条(kmp)
- HDU 2087:剪花布条(KMP入门)