hdu——2087剪花布條 ( kmp 和 find用法 )
阿新 • • 發佈:2019-01-04
剪花布條
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 14540 Accepted Submission(s): 9201
Problem Description
一塊花布條,裡面有些圖案,另有一塊直接可用的小飾條,裡面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中儘可能剪出幾塊小飾條來呢?
Input
輸入中含有一些資料,分別是成對出現的花布條和小飾條,其布條都是用可見ASCII字元表示的,可見的ASCII字元有多少個,布條的花紋也有多少種花樣。花紋條和小飾條不會超過1000個字元長。如果遇見#字元,則不再進行工作。
Output
輸出能從花紋布中剪出的最多小飾條個數,如果一塊都沒有,那就老老實實輸出0,每個結果之間應換行。
Sample Input
abcde a3
aaaaaa aa
#
Sample Output
0
3
Author
qianneng
Source
冬練三九之二
Recommend
lcy
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 14540 Accepted Submission(s): 9201
Problem Description
一塊花布條,裡面有些圖案,另有一塊直接可用的小飾條,裡面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中儘可能剪出幾塊小飾條來呢?
Input
輸入中含有一些資料,分別是成對出現的花布條和小飾條,其布條都是用可見ASCII字元表示的,可見的ASCII字元有多少個,布條的花紋也有多少種花樣。花紋條和小飾條不會超過1000個字元長。如果遇見#字元,則不再進行工作。
Output
輸出能從花紋布中剪出的最多小飾條個數,如果一塊都沒有,那就老老實實輸出0,每個結果之間應換行。
Sample Input
abcde a3
aaaaaa aa
#
Sample Output
0
3
Author
qianneng
Source
冬練三九之二
Recommend
lcy
find查詢子串 從0開始如果找到加上字串的長度直到到模板的末尾
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<queue> #include<set> #include<map> #include<sstream> #include<algorithm> #include<cmath> #include<cstdlib> #include<deque> using namespace std; int main() { string n,m; int k,h; while((cin>>n)&&(n[0]!='#')) { cin>>m; k=0; h=0; while(1) { k=n.find(m,k); if(k!=-1) { k+=m.length(); h++; } else break; } cout<<h<<endl; } return 0; }
kmp演算法
#include<iostream> #include<string> #include<cstring> using namespace std; int nexta[100010]; int sum; void getnext(string s1) { int i=0,j=-1; nexta[0]=-1; while(i<s1.size()) { if(j==-1||s1[i]==s1[j]) { ++i; ++j; if(s1[i]!=s1[j]) { nexta[i]=j; } else nexta[i]=nexta[j]; } else j=nexta[j]; } } void kmp(string n,string m) { int i=0,j=0; while(i<n.size()) { if(j==-1||n[i]==m[j]) { ++i; ++j; } else j=nexta[j]; if(j==m.size()) { sum++; j=0;//j=1;//I=i +m.size-1; } } } int main() { string s1,s2;sum=0; ios::sync_with_stdio(false); while(cin>>s1&&s1!="#") { sum=0; cin>>s2; getnext(s2); kmp(s1,s2); cout<<sum<<endl; } return 0; }