hdu 2087 剪花布條 kmp小水
剪花布條
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3083 Accepted Submission(s): 2079
Problem Description 一塊花布條,裡面有些圖案,另有一塊直接可用的小飾條,裡面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中儘可能剪出幾塊小飾條來呢?
Input 輸入中含有一些資料,分別是成對出現的花布條和小飾條,其布條都是用可見ASCII字元表示的,可見的ASCII字元有多少個,布條的花紋也有多少種花樣。花紋條和小飾條不會超過1000個字元長。如果遇見#字元,則不再進行工作。
Output 輸出能從花紋布中剪出的最多小飾條個數,如果一塊都沒有,那就老老實實輸出0,每個結果之間應換行。
Sample Input abcde a3aaaaaa aa#Sample Output03普通方法版本很弱智
#include<stdio.h> #include<string.h> char a[1005]; char b[1005]; int main() { int i,j,d1,d2,k,cnt; while(scanf("%s",a+1)) { cnt=0; if(a[1]=='#') return 0; scanf("%s",b+1); d1=strlen(a+1); d2=strlen(b+1); for(i=1;i<=d1-d2+1;i++) { k=i; for(j=1;j<=d2;) { if(a[k]==b[j]) { k++;j++; if(j==d2+1) {cnt++;j=1;i=i+d2-1;break;} } else {j=1; break;} } } printf("%d\n",cnt); } return 0; }
/*kmp版本*/ #include<stdio.h> #include<string.h> char a[1005]; char b[1005]; int d1,d2; int next[1005]; void get_next() { int i,j; i=1; j=0; next[1]=0; while(i<d1) { if(j==0||b[i]==b[j]) {i++;j++;next[i]=j;} else j=next[j]; } } int KMP() { int i=1,j=1,cnt=0; while(i<=d1) { if(j==0||a[i]==b[j]) {i++;j++;} else j=next[j]; if(j>d2) {cnt++;j=1;};//不能是等於 是大於 因為上面是//j++ 等於的時候實際上少了一個 } return cnt; } int main() { int i,j,ans; while(scanf("%s",a+1)) { if(a[1]=='#') return 0; scanf("%s",b+1); d1=strlen(a+1); d2=strlen(b+1); get_next(); ans=KMP(); printf("%d\n",ans); } return 0; } /*總結 可以看出 有時候用普通的方法做也很簡單 但是等真正的掌握了KMP 做這種題目就更加簡單 一開始可能覺得這種小題用KMP 沒必要 但是用熟練了 用KMP做可能會更快 更準確 還得防超時*/
相關推薦
hdu 2087 剪花布條 kmp小水
剪花布條 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3083 Accepted Submission
HDU 2087 剪花布條 KMP(判斷不重疊區間加以判斷)在看題中逐漸理解kmp...
http://acm.hdu.edu.cn/showproblem.php?pid=2087 #include <iostream> #include<cstdio> #include<algorithm> #include<cstring> #i
題解報告:hdu 2087 剪花布條(KMP入門)
不變 indent spa bottom fix href pac transform eight 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 Problem Description 一塊花布條,裏面有些圖案,另有
【HDU 2087 剪花布條】
arc sci aps == clas cst tabs desc accep Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi
HDU 2087: 剪花布條
col 輸出 之間 剪花布條 結果 出現 bcd sci aaaaaa HDU 2087: 剪花布條 題目描述 一塊花布條,裏面有些圖案,另有一塊直接可用的小飾條,裏面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中盡可能剪出幾塊小飾條來呢? 輸入 輸入中含
hdu-2087 剪花布條
Problem Description 一塊花布條,裡面有些圖案,另有一塊直接可用的小飾條,裡面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中儘可能剪出幾塊小飾條來呢? Input 輸入中含有一些資料,分
HDU 2087 剪花布條
剪花布條 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi
HDU 2087 減花布條(KMP 匹配)
題目:Description一塊花布條,裡面有些圖案,另有一塊直接可用的小飾條,裡面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中儘可能剪出幾塊小飾條來呢? Input輸入中含有一些資料,
hdu——2087剪花布條 ( kmp 和 find用法 )
剪花布條 Time Limit: 1000/1000 MS (Java/
剪花布條 HDU - 2087(KMP 貪心選擇)
題意: 給定兩個串S 和 T,求S中最多不重疊的包含了多少個T串. 分析: 不重疊的話,就是在正常的KMP基礎上,匹配到T的末尾的時候,j要回到0. #include<bits/
C - 剪花布條 HDU-2087
cin con cnblogs color cst 解題思路 cto ons ack 解題思路: 求不重疊的匹配次數。 參考代碼: 1 #include <iostream> 2 #include <vector> 3 #inc
HDU 2087 剪花布條 (簡單KMP或者暴力)
string abcde 都沒有 chm strlen oba bre while align 剪花布條 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
HDU2087 剪花布條(KMP)
inpu math 另有 vector 進行 put 多少 for 模板題 HDU2087 剪花布條 一塊花布條,裏面有些圖案,另有一塊直接可用的小飾條,裏面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中盡可能剪出幾塊小飾條來呢? Input 輸入中含有一些數
hdu2087-自己的理解&kmp講解-剪花布條
http://acm.hdu.edu.cn/showproblem.php?pid=2087 連結 時隔多年,終於理解kmp了。。 1 進行字串匹配,如果進行暴力匹配的話,(即一個一個找,時間複雜度O(len1*len2),是不可取的,) 2 所以
HDU 2087 剪花布條【在字符串中不可重疊地尋找子串數量】
out oid main nbsp char 都沒有 進行 尋找 else 一塊花布條,裏面有些圖案,另有一塊直接可用的小飾條,裏面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中盡可能剪出幾塊小飾條來呢? Input輸入中含有一些數據,分別是成對出現的花布
剪花布條
bcd har == tdi cnblogs scan char cde 都是 一塊花布條,裏面有些圖案,另有一塊直接可用的小飾條,裏面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中盡可能剪出幾塊小飾條來呢? Input輸入中含有一些數據,分別是成
HDU2087 剪花布條
for problem ostream pac cstring list () math str1 題目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2087 這道題看大佬們都用KMP做,但本萌新用string弱弱水過。。。
LOJ #10043. 「一本通 2.2 例 1」剪花布條
題目描述 原題來自:HDU 2087 一塊花布條,裡面有些圖案,另有一塊直接可用的小飾條,裡面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中儘可能剪出幾塊小飾條來呢? 輸入格式 輸入資料為多組資料,讀取到 # 字元時結束。每組資料僅有一行,為由空格分
剪花布條 cmp簡單入門
#include <stdio.h> #include <stdlib.h> #include<string.h> int main() { int i,len1,len2,cnt; char str1[1001],str2[1001
3708 Problem C 剪花布條
問題 C: 剪花布條 時間限制: 1000 Sec 記憶體限制: 10000 MB 提交: 33 解決: 17 題目描述 一塊花布條,裡面有些圖案,另有一塊直接可用的小飾條,裡面也有一些