1. 程式人生 > >Hackerrank:Yet Another KMP Problem

Hackerrank:Yet Another KMP Problem

This challenge uses the famous KMP algorithm. It isn't really important to understand how KMP works, but you should understand what it calculates.

A KMP algorithm takes a string, SS, of length NN as input. Let's assume that the characters in SS are indexed from 11to NN; for every prefix of S

S, the algorithm calculates the length of its longest valid border in linear complexity. In other words, for every ii (where 1iN1≤i≤N) it calculates the largest ll (where 0li10≤l≤i−1) such that for every pp(where 1pl1≤p≤l) there is S[p]=S[il+p]S[p]=S[i−l+p].

Here is an implementation example of KMP:

kmp[1] = 0;
for (i = 2; i <= N; i = i + 1){
    l = kmp[i - 1];
    while (l > 0 && S[i] != S[l + 1]){
        l = kmp[l];
    }
    if (S[i] == S[l + 1]){
        kmp[i] 
            
           

相關推薦

HackerrankYet Another KMP Problem

This challenge uses the famous KMP algorithm. It isn't really important t

【CF903G】Yet Another Maxflow Problem 線段樹

pri soft string ace 題解 pda 容量 tro tor 【CF903G】Yet Another Maxflow Problem 題意:一張圖分為兩部分,左邊有n個點A,右邊有m個點B,所有Ai->Ai+1有邊,所有Bi->Bi+1有邊,某些

Codeforces 903G Yet Another Maxflow Problem - 線段樹

vector 維護 update win32 main spa 一個 tps print 題目傳送門   傳送門I   傳送門II   傳送門III 題目大意   給定一個網絡。網絡分為$A$,$B$兩個部分,每邊各有$n$個點。對於$A_{i} \ (1

[CF903G]Yet Another Maxflow Problem

發的 void b+ std sdi 需要 -a lin clu [CF903G]Yet Another Maxflow Problem 題目大意: 有\(A\)類點和\(B\)類點各\(n(n\le2\times10^5)\)個,所有\(A_i\)到\(A_{i+1}\)

CodeForces - 868F Yet Another Minimization Problem

|| inf -- efi min bits get 移動 個數 Description 給定一個長度為 \(n(n\le 10^5)\) 的數列,第 \(i\) 個數是 \(a_i\in[1,n]\) ,要求將其劃分為 \(k(2\le k\le min(20,n))\)

codeforces CF903G Yet Another Maxflow Problem 線段樹

img several http 答案 codeforce mes take 感謝 city $ \Rightarrow $ 戳我進CF原題 G. Yet Another Maxflow Problem time limit per test: 4 seconds mem

CF868 F. Yet Another Minimization Problem 決策單調優化 分治

efi getch 預處理 algo 單調性 代碼 arr 最優決策 ref 題目鏈接 CF868F. Yet Another Minimization Problem 題解 \(f_{i,j}=\min\limits_{k=1}^{i}\{f_{k,j-1}+w_{k,i

Codeforces 868F. Yet Another Minimization Problem【決策單調性優化DP】【分治】【莫隊】

LINK 題目大意 給你一個序列分成k段 每一段的代價是滿足\((a_i=a_j)\)的無序數對\((i,j)\)的個數 求最小的代價 思路 首先有一個暴力dp的思路是\(dp_{i,k}=min(dp_{j,k}+calc(j+1,i))\) 然後看看怎麼優化 證明一下這個DP的決策

Codeforces 1073G Yet Another LCP Problem $SA$+單調棧

題意 給出一個字串\(s\)和\(q\)個詢問。 每次詢問給出兩個長度分別為\(k,l\)的序列\(a\)和序列\(b\)。 求\(\sum_{i=1}^{k}\sum_{j=1}^{l}lcp(s[a_i…n],s[b_j…n])\) Solution \(SA\)練習題。 求出\(height\)陣

[CF868F] Yet Another Minimization Problem

Description 給定一個序列,要把它分成k個子序列。每個子序列的費用是其中相同元素的對數。求所有子序列的費用之和的最小值。 Solution 仍然是決策單調性的題目。 \(f[i][j]\)表示把前\(i\)個數分成\(j\)份的最小費用。 \[ f[i][j

CodeForces903G Yet Another Maxflow Problem 掃描線 + 線段樹 + 最小割

lse namespace add else return min names aik 最小值 給定兩條鏈\(A, B\),其中\(A\)鏈某些點向\(B\)鏈有連邊,支持修改\(A\)鏈中的某條邊權以及查詢\(A_1\)到\(B_n\)的最大流 顯而易見,\(A\)和\

4474 Yet Another Multiple Problem(HDU)

題意理解 給定一個數n(0<n<10000),和一組共m個個位數,要求n的倍數不包含m個個位數的最小值,不存在返回-1。 問題分析 用數位BFS搜尋演算法 轉1:個位數0-9共10種,排除m種後還剩10-m種取值,這10-m個數字任意組合後的數是n的最小倍數就是所求的數字

CodeForces 868F Yet Another Minimization Problem(決策單調性優化 + 分治)

efi isp size fine logs res namespace c++ 得到 題意 給定一個序列 \(\{a_1, a_2, \cdots, a_n\}\),要把它分成恰好 \(k\) 個連續子序列。 每個連續子序列的費用是其中相同元素的對數,求所有劃分中的費用之

Yet Another Ball Problem

lines file ever spec data include ash const for Yet Another Ball Problem time limit per test 3 seconds memory limit per test 25

863D - Yet Another Array Queries Problem(思維)

for space std 答案 ostream sca set struct 思維 原題連接:http://codeforces.com/problemset/problem/863/D 題意:對a數列有兩種操作: 1 l r ,[l, r] 區間的數字滾動,即a[i

CodeForces 863D Yet Another Array Queries Problem 暴力

names scanf amp pan turn 得到 include net == CodeForces 863D 題意:長度為 n 的數組 a[] ,有兩個操作: 1、區間 [l,r] 的數向右移,即 a[i+1] 變為 a[i],a[l] 變為 a[r] 。 2、

Educational Codeforces Round 46 D. Yet Another Problem On a Subsequence

mod ons ++ 數列 一個數 () -- problem dot 題目大意 定義一個數列是“好的”:第一個數字a[0]為數列長度+1。 定義一個數列的子序列是“好的”:這個子序列能分割成幾個“好的”數列。 各一個數列,求“好的”子序列的數目。 解題思路 一開始想

CodeForces - 1000D Yet Another Problem On a Subsequence

CP get highlight #define oid brush for turn force 題面在這裏! 好智障的一個dp啊,一段開頭的數字相當於下面要跟多少個數,直接滾動數組dp就行了。。。 #include<bits/stdc++.h&g

「 CodeForces954I」Yet Another String Matching Problem-FFT

Description 定義兩個長度相等的字串之間的距離為: 把兩個字串中所有同一種字元變成另外一種,使得兩個字串相等所需要操作的次數的最小值。 求 s