1. 程式人生 > >擴充套件歐幾里得和kmp

擴充套件歐幾里得和kmp

擴充套件歐幾里得模板(是解二元線性方程的一般解法)

int exgcd(int a,int b,int &x,int &y)
{
    if(!b)
    {
        x=1;
        y=0;
        return a;
    }
        int temp=exgcd(b,a%b,x,y)
        int t=x;
        x=y;
        y=t-a/b*y;
        return temp;
}

kmp模板
用來解決字串的模式匹配問題,也可以解決公共最長前後綴的問題。
其中的重中之重是求next陣列 ,具體的kmp操作到不是那麼難理解,所以這裡只給出getnext()函式的寫法。

void getnext(string s)
{
    int i=0,j=-1;
    while(i<s.length())
    {
        if(j==-1||s[i]==s[j])
            next[++i]=++j;
        else
            j=next[j];
    }
}