FZU 1901Period II 擴充套件kmp

2021-10-05 06:32:59 字數 2515 閱讀 1501

題意:

給你乙個字串,問你有多少個p,滿足s[i] == s[i+p](i+p <= len)。

思路:一開始往kmp想了,不斷遞迴迴圈節,但感覺不是很好搞,然後就想了一下exkmp,發現exkmp就是專門搞這種事的,因為算的是字尾和整個的公共部分,如果這個公共部分等於字尾的長度,那就滿足題目要求的條件,把(串的長度 - 字尾的長度)加入答案,最後排個序就可以了。 注意整個串的情況要特判一下,不然加入答案的就是0而不是整個串的長度。

吐槽一下編譯器的版本,交了好幾發ce,還不給為什麼ce,很氣。

/**

* author : zzy

* date : 2020-04-20-16.09.17 monday

*/#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define eb emplace_back

#define mp make_pair

#define mt make_tuple

#define fi first

#define se second

#define pb push_back

#define all(x) (x).begin(), (x).end()

#define rall(x) (x).rbegin(), (x).rend()

#define forn(i, n) for (int i = 0; i < (int)(n); ++i)

#define for1(i, n) for (int i = 1; i <= (int)(n); ++i)

#define ford(i, a, b) for (int i = (int)(a); i >= (int)b; --i)

#define fore(i, a, b) for (int i = (int)(a); i <= (int)(b); ++i)

#define rep(i, l, r) for (int i = (l); i <= (r); i++)

#define per(i, r, l) for (int i = (r); i >= (l); i--)

#define ms(x, y) memset(x, y, sizeof(x))

#define sz(x) ((int)(x).size())

using

namespace std;

typedef pair<

int,

int> pii;

typedef vector<

int> vi;

typedef vector vpi;

typedef vector vvi;

typedef

long

long i64;

typedef vector vi64;

typedef vector vvi64;

typedef pair pi64;

typedef

double ld;

template

<

class

t>

bool

uin(t &a, t b)

template

<

class

t>

bool

uax(t &a, t b)

const

int maxn =

1000000

+100

;int nxt[maxn]

, extend[maxn]

;char x[maxn]

, y[maxn]

;int res[maxn]

;void

pre_ekmp

(char x,

int m,

int nxt)

}}intmain()

sort

(res, res+now)

; cout <<

"case #"

<< k <<

": "

<< now <<

'\n'

;for

(int i =

0; i < now;

++i)

cout <<

'\n';}

//#ifdef local_define

// cerr << "time elapsed: " << 1.0 * clock() / clocks_per_sec << " s.\n";

//#endif

return0;

}

1901 賞賜 OR 災難

time limit 1 sec memory limit 128 mb submitted 418 solved 110 大g南征北戰終於打下了大片土地成立了g國,大g在開國大典上傳召幫助自己南征北戰的三大開國元勳小a,小b,小c進殿,並要賞賜三人大量寶物以顯示天恩浩蕩。大g在征服其他國家的時候搶...

vue 使用技巧總結 19 01

上面的函式中使用箭頭,會導致 this 捕獲不到 vue 例項。各位道友切記切記.目前通常使用的方式是 然後在查資料的時候翻到了乙個統一管理的方式 asynccomponent.js 檔案 export const component01 import views export const comp...

vijos1901 學姐的錢包

學姐每次出門逛街都要帶恰好m元錢,不過她今天卻忘記帶錢包了.可憐的doc只好自己湊錢給學姐,但是他口袋裡只有一元錢.好在doc的n位朋友們都特別有錢,他們答應與doc作一些交換.其中第i位朋友說 如果doc有不少於ri元錢,doc可以把手上所有的錢都給這位朋友,並從這位朋友手中換回vi元錢,但是這次...