文档介绍:: .
{}代码仓库仓库规范管理Evaluation <m;++i)if(a[i][col])//消元
for(intj=col;j<=n;++j)a[i][j]^=a[k][j];
}
for(inti=k;i<m;++i)if(a[i][n])return-1;
if(k<=n)returnn-k;//返回自由元个数
}
高斯消元,求出一组解的
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
usingnamespacestd;
constintN=1010;
constdoubleEPS=1e-7;
intm,n;
doublea[N][N],x[N];
intGauss(intm,intn){
intcol=0,k=0;//col 为列号,k 为行号
for(;k<m&&col<n;++k,++col){
intr=k;
for(inti=k+1;i<m;++i)
if(fabs(a[i][col])>fabs(a[r][col]))r=i;
if(fabs(a[r][col])<EPS){k--;continue;}//列全为 0
if(r!=k)for(inti=col;i<=n;++i)
swap(a[k][i],a[r][i]);
for(inti=k+1;i<m;++i)//消元
if(fabs(a[i][col])>EPS){
doublet=a[i][col]/a[k][col];
for(intj=col;j<=n;j++)a[i][j]-=a[k][j]*t;
a[i][col]=0;
}}
for(inti=k;i<m;++i)//无解
if(fabs(a[i][n])>EPS)return-1;
if(k<n)returnn-k;//自由元个数
for(inti=n-1;i>=0;i--){//回带求解
doubletemp=a[i][n];
for(intj=i+1;j<n;++j)
temp-=x[j]*a[i][j];
x[i]=(temp/a[i][i]);
}
return0;
}
Manacher 算法
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
usingnamespacestd;
constintN=233333;//20W
//在 o(n)时间内算出以每个点为中心的最大回文串长度
intManacher(stringst){
intlen=();
int*p=newint[len+1];
memset(p,0,sizeof(p));
intmx=0,id=0;
for(inti=1;i<=len;i++){
if(mx>i)p[i]=min(p[2*id-i],mx-i);
elsep[i]=1;
while(st[i+p[i]]==st[i-p[i]])p[i]++;
if(i+p[i]>mx){mx=i+p[i];id=i;}
}
intma=0;
for(inti=1;i<len;i++)ma=max(ma,p[i]);
delete(p);
returnma-1;
}
intmain(){
//freopen("","r",stdin);
charst[N];while(~scanf("%s",st)){
stringst0="$#";
for(inti=0;st[i]!='\0';i++){
st0+=st[i];st0+="#";
}
printf("%d\n",Manacher(st0));
}
return0;
}
KMP 字符串匹配
#include<cstdio>
#include<cstring>
usingnamespacestd;
typedeflonglongll;
constintN=100007;
constintP=007;
chara