剪花布條 HDU 2087 KMP模板

2021-09-11 23:24:23 字數 1434 閱讀 6840

一塊花布條,裡面有些圖案,另有一塊直接可用的小飾條,裡面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中盡可能剪出幾塊小飾條來呢?

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...