扩展欧几里得和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];
    }
}

猜你喜欢

转载自blog.csdn.net/wnmxhAC/article/details/82225637