一塊花布條,裡面有些圖案,另有一塊直接可用的小飾條,裡面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中盡可能剪出幾塊小飾條來呢?
input
輸入中含有一些資料,分別是成對出現的花布條和小飾條,其布條都是用可見ascii字元表示的,可見的ascii字元有多少個,布條的花紋也有多少種花樣。花紋條和小飾條不會超過1000個字元長。如果遇見#字元,則不再進行工作。
output
輸出能從花紋布中剪出的最多小飾條個數,如果一塊都沒有,那就老老實實輸出0,每個結果之間應換行。
sample input
abcde a3
aaaaaa aa
#
sample output
0
3
本題目是從乙個待匹配的串中找到模式串,這裡與其他題目有些不一樣的是,aaaaaa 裡面找aa 只有3個,不是5個,這點應該要注意,題目要求是找到乙個串,就將它減掉,然後再找,與以前的有一些不一樣。
還是提供兩個版本,stl,和裸kmp(模板)
#include#include#include#include#include#include#include#include#include#include#define tle ios::sync_with_stdio(0),cin.tie(0)
using namespace std;
const int maxn=1000005;
typedef long long ll;
typedef pairp;
int main()
cout《資料量不是很大,用stl甚至比kmp時間更短一些,記憶體更小,有時候我就會在這個find while 裡面是刪除 操作還是其他替換操作 想想最好的是哪個。
下面kmp 版本(本身自己就沒有學好kmp ,只能放一下模板和說一說注意點)
//kmp 演算法
#include#includeusing namespace std;
const int maxn=1000005;
#includetypedef long long ll;
#includechar s[maxn];
char s1[maxn];
int anext[maxn];
void getnext(char *p)
}return ans;
}int main()
return 0;
}
由於這個題目的要求是減掉一段模式串,所以在判斷一次成立的時候
if(j>=len2)
這個j就好像是當前狀態的 與文字串最大的字首數,將他置成0,就是在一次重新開始的意思。恩,就是這樣,直到文字串全部都遍歷一遍後才結束的。
也是一種考察方法吧。
剪花布條 HDU 2087(kmp演算法)
一塊花布條,裡面有些圖案,另有一塊直接可用的小飾條,裡面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中盡可能剪出幾塊小飾條來呢?input 輸入中含有一些資料,分別是成對出現的花布條和小飾條,其布條都是用可見ascii字元表示的,可見的ascii字元有多少個,布條的花紋也有多少種花樣。...
剪花布條 hdu 2087(kmp模板題)
一塊花布條,裡面有些圖案,另有一塊直接可用的小飾條,裡面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中盡可能剪出幾塊小飾條來呢?input 輸入中含有一些資料,分別是成對出現的花布條和小飾條,其布條都是用可見ascii字元表示的,可見的ascii字元有多少個,布條的花紋也有多少種花樣。...
剪花布條 HDU 2087 KMP模板題
題意 2個字串a,b.問a中有多少個字串b.input 輸入中含有一些資料,分別是成對出現a,b a和b不會超過1000個字元。如果遇見 字元,則表示測試結束。output 輸出b的個數,每個結果之間應換行。kmp模板題 include include include include include...