还剩27页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
代码仓库目录
01.【数学方法】矩阵快速幕
02.【数学方法】高斯消元(naiv㊀版)
03.【数学方法】高斯消元(mid版)
04.【字符串啊】Manacher算法(回文串)
05.【字符串啊】KMP(字符串匹配)
06.【数据结构】线段树(ZKW单点修改)
07.【数据结构】线段树(RMQ)
08.【数据结构】线段树(区间加+赋值)
09.【数据结构】Splay树(未完全测试)////!!.【数据结构】AVL树(平衡树).【图论图论】最小生成树(prim).【图论图论】次小生成树.【图论图论】最大流(Dinic).【图论图论】LCA+最大生成树(truck).【动态规划】背包01多重,完全线段树区间加+赋值#includecstdio#includecstring#includeiostream#includealgorithmusingnamespacestd;constintN=260000;intnm;structlinetree{#define1ctl#definerctlA1#definemid1[t]-f-r[t]1int1[N]r[N]Mtag[N]sum[N]len[N]Set[N];inlinevoidbuildintn{M=1;whileMnM«=l;M--;//getMmemsetsum0sizeofsum;memsettag0sizeoftag;memsetSet0sizeofSet;forinti=l+M;i=M*2+l;i++{//leafifi=n+Mscanfu%dsum[i];l[i]=r[i]=i-M;len[i]=1;forintt=M;t=l;t--{//fatherssum[t]=sum[1c]+sum[rc];1[t]=l[1c]r[t]=r[rc];len[t]=len[1c]+len[rc];}inlinevoiddownintt{iftM{Set[t]=tag[t]=0/return;}//leafnodeifSet[t]{sum[1c]=Set[t]*len[1c];sum[rc]=Set[t]*len[rc];Set[1c]=Set[t];Set[rc]=Set[t];Set[t]=0;tag[1c]=tag[rc]=0;iftag[t]{sum[1c]+=tag[t]*len[1c];sum[rc]+=tag[t]*len[rc];tag[1c]+=tag[t];tag[rc]+=tag[t];tag[t]=0;}inlinevoid_taginttintx{sum[t]+=x*len[t];tag[t]+=x;}inlinevoid_setinttintx{sum[t]=x*len[t];Set[t]=x;tag[t]=0;}voidchangeinttintLintRintx{ifL=1[t]r[t]=R{_tagtx;return;}downt;ifL=midchange1cALRx;ifmidRchangercLRx;sum[t]=sum[1c]+sum[rc];}voidsetinttintLrintRrintx{ifL=1[t]r[t]=R{_settx;return;}//indownt;ifL=midsetlcLRx;ifmidRsetrcLRx;sum[t]=sum[1c]+sum[rc];}intqueryinttintLrintR{ifL=1[t]r[t]=Rreturnsum[t];downt;intans=0;ifL=midans+=query1cLfR;ifmidRans+=queryrcLzR;returnans;}T;Splay-Tree#includecstdio#includealgorithmusingnamespacestd;structNode{intkey;//sizeNode*1*r*f;//leftrightfather};classSplayTree{public:voidInit{rt=NULL;}voidZagNode*x{//leftrotateNode*y=x-f;//yisthefatherofxy-r=x-l;ifx-l=y;//ifxhasleftchildx-f=y-f;ify-f{//yisnotrootify==y-f-ly-f-l=x;//yifleftchildelsey-f-r=x;//yisrightchild}y-f=x;x-l=y;}voidZigNode*x{//rightrotateNode*y=x-f;//yisthefatherofxy-l=x-r;ifx-rx-r-f=y;x-f=y-f;ify-f{ify==y-f-ly-f-l=x;elsey-f-r=x;y-f=x;x-r=y;}voidSplayNode*x{whilex-f{Node*p=x-f;ifp-f{ifx==p-lZigx;elseZagx;}elseifx==p-l{ifp==p-f-l{Zigp;Zigx;}else{Zigx;Zagx;}}else{//x==p-〉rifp==p-f-r{Zagp;Zagx;else{Zagx;Zigx;}}rt=x;}Node*Findintx{Node*T=rt;whileT{ifT-key==x{SplayT;returnT;}elseifxT-keyT=T-1;elseT=T-r;returnT;}voidInsertintx{Node*T=rt*fa=NULL;whileT{fa=T;ifxT-keyT=T-1;elseifxT-keyT=T-r;elsereturn;//twothesamekeysT=Node*mallocsizeofNode;T-key=x;T-l=T-r=NULL;T-f=fa;iffa{iffa-keyxfa-l=T;elsefa-r=T;SplayT;}voidDeleteintx{Node*T=Findx;ifNULL==Treturn;//errorrt=JoinT-1T-r;}Node*MaxnumNode*t{Node*T=t;whileT-rT=T-r;SplayT;returnT;}Node*MinnumNode*t{Node*T=t;whileT-1T=T-1;SplayT;returnT;}Node*Lastintx{Node*T=Findx;T=T-1;returnMaxnumT;}Node*Nextintx{Node*T=Findx;T=T-r;returnMinnumT;}Node*JoinNode*tlNode*t2{ifNULL==tlreturnt2;ifNULL==t2returntl;Node*T=Maxnumtl;T-l=t2;returnT;}voidSplitintxfNode*tlfNode*t2{Node*T=Findx;tl=T-l;t2=T-r;}voidInorderNode*T{ifNULL==Treturn;InorderT-1;printff%d-nT-key;InorderT-r;}void_Delete{Deletert;}voidDeleteNode*T{ifNULL==Treturn;DeleteT-1;DeleteT-r;freeT;}private:Node*rt;//root};AVL树//codevsl285沫90y「//bycww97#includecstdio#includeiostream#includealgorithm#defineINFOxfffffff#defineBASE1OOOOOOusingnamespacestd;intans=0;structNode{intxbfh;//bf=balancefactorh=heightNode*1*r;};classAVLTree{public:voidInit{rt=NULL;}intHNode*T{returnT==NULL0:T-h;}intBFNode*1zNode*r{//getbalancefactorifNULL==1NULL==rreturn0;elseifNULL==1return-r-h;elseifNULL==rreturnl-h;returnl-h-r-h;}Node*LrorateNode*a{//leftrorateNode*b;b=a-r;a-r=b-l;b-l=a;a-h=maxHa-lHa-r+1;b-h=maxHb-lHb-r+1;a-bf=BFa-la-r;b-bf=BFb-lb-r;returnb;}Node*RrorateNode*a{//rightrorateNode*b;b=a-l;a-l=b-r;b-r=a;a-h=maxHa-lrHa-r+1;b-h=maxHb-lHb-r+1;a-bf=BFa-la-r;b-bf=BFb-lzb-r;returnb;}Node*LRrorateNode*a{//leftthenrighta-l=Lroratea-l;Node*c;c=Rroratea;returnc;}Node*RLrorateNode*a{//rightthenlefta-r=Rroratea-r;Node*c;c=Lroratea;returnc;}voidInsertintx{_Insertrtx;}void_InsertNode*Tintx{ifNULL==T{T=Node*mallocsizeofNode;T-x=x;T-bf=0;T-h=l;T-l=T-r=NULL;return;}ifxT-x_InsertT-1x;elseifxT-x_InsertT-rx;elsereturn;//error:thesameyT-h=maxHT-1HT-r+1///maintainT-bf=BFT-1T-r;ifT-bf1||T-bf-1{//notbalancedifT-bf0T-l-bf0T=RrorateT;elseifT-bf0T-r-bf0T=LrorateT;elseifT-bf00T=LRrorateT;elseifT-bf0T-r-bf0T=RLrorateT;}}voidGetPetintx{//getpetorpersonifNULL==rt{return;}intsmall=0large=INF;//printfHx=%d\nnx;intflag;ifFindrtzxsmalllarge{printffind%d\nHx;_Deletertx;}elseifsmall==0flag=l;elseiflarge==INFflag=0;elseiflarge-xx-smallflag=l;elseflag=0;if!flag{//chooselarge_Deletertsmall;ans=ans+x-small%BASE;}else{_Deletertlarge;ans=ans+large-x%BASE;}}boolFindNode*TrintxintfismallintSlarge{ifNULL==Treturn0;ifx==T-xreturn1;ifxT-x{large=minlargerT-x;returnFindT-1xsmalllarge;}else{small=maxsmallzT-x;returnFindT-rxsmalllarge;}}void_DeleteNode*Tintx{ifNULL==Treturn;ifxT-x{//yatleft_DclctcT-1x;T-bf=BFT-1T-r;ifT-bf-l{ifl==T-r-bfT=RLrorateT;elseT=LrorateT;//bf==0or-1}}elseifxT-x{//yatright_DeleteT-rx;T-bf=BFT-1T-r;ifT-bfl{if-]==T-l-bfT=LRrorateT;elseT=RrorateT;//bf==Oor1}}else{//hereisxifT-lT-r{//leftrightNode*t=T-l;whilet-rt=t-r;T-x=t-x;_DeleteT-1t-x;T-bf=BFT-1zT-r;ifT-bf-l{ifl==T-r-bfT=RLrorateT;elseT=LrorateT;//bf==0or-1}else{//left||rightNode*t=T;ifT-1T=T-1;elseifT-rT=T-r;else{freeT;T=NULL;}ifTfreet;}}}//Debugyouwillnotneeditatthisproblemvoidshow{InOrderrt;putsnEndShown;}voidInOrderNode*T{//print1rtrifNULL==Treturn;InOrderT-1;printfn%dnT-x;InOrderT-r;}voidFree{FreeTreert;}voidFreeTreeNode*T{ifNULL==Treturn;FreeTreeT-1;FreeTreeT-r;freeT;private:Node*rt;//root};intmain{freopen”fuck.innrnstdin;intnxopa=0b=0;scanfn%dn;AVLTreeT;T.Init;for;n-;{scanf%d%doprx;//ifpetspeopleputpetsintothetree//elseputpeopleintothetreeifop==0{//comeapeta++;ifabT.Insertx;//morepetelseT.GetPetx;//morepeople}else{//comeapersonb++;ifabT.Insertx;//morepeopleelseT.GetPetx;//morepet}}printf%d\n,ans%BASE;T.Free;return0;矩阵模板#includecstdio#includecstring#includeiostreamusingnamespacestd;typedeflonglong11;constintP=9973;constintN=13;11nm;structmatrix{11a[N][N];introwcol;matrix:rowNcolN{memseta0Asizeofa;}//matrixintxrinty:rowxcoly{memseta0sizeofa;}11*operator[]intx{returna[x];}matrixoperator*matrixx{matrixtmp;forinti=0;i=n+l;i++forintj=0;j=n+l;j++{tmp[i][j]=0;forintk=0;k=n+l;k++tmp[i][j]=tmp[i][j]+a[i][k]*x[k][j]%P;}returntmp;}voidoperator*=matrixx{*this=*this*x;}matrixoperatorA11x{matrixret;forinti=0;i=n+l;i++ret[i][i]=l;matrixtmp=*this;for;x;x»=ltmp*=tmp{ifxlret*=tmp;}returnret;}voidprint{forinti=0;i=n+l;i++{forintj=0;j=n+l;j++printfn%dna[i][j];putsr;}};最小生成树primhdull02#includecstdio#includecstring#includeiostreamusingnamespacestd;constintN=107;intng[N][N];intprim{intminw[N];//MinWeightboolused[N];memsetused0sizeofused;memsetminw0x7fsizeofminw;minw[U=0;intsum=0;while1{intv=-l;forinti=l;i=n;i++{if!used[i]v==-l||minw[i]minw[v]v=i;}ifv==-break;used[v]=1;sum+=minw[v];forinti=0;i=n;i++{minw[i]=minminw[i]g[v][i];}}returnsum;intmain{for;scanf,n==1;{forinti=l;i=n;i++forintj=l;j=n;j++scanfTI%dng[i][j];intxyq;scanfn%dnq;for;q-;{scanfn%d%dnxy;g[x][y]=g[y][x]=0;}printfn%d\nHprim;}return0;次小生成树hdu4081//hdu4081次小生成树#includecmath#includecstdio#includecstring#includeiostreamusingnamespacestd;constintN=1007;intn;doubleg[N][N]maxw[N][N];boolused[N][N];structCity{intxyw;//w=populationCity:x0y0w0{Cityint_xint_yintw:x_xy_yw_w{}}citys[N];doubledistCityaCityb{returnsqrta.x-b.x*a.x-b.x+a.y-b.y*a.y-b.y;}doubleprim{intfrom[N];boolvis[N];doubleminw[N];forinti=l;i=n;i++{minw[i]=g[l][i];from[i]=1;memsetusedsizeofused;memsetmaxw0sizeofmaxw;memsetvis0sizeofvis;vis
[1]=1;minw[U=0;doublesum=0;while1{intv=-l;forinti=l;i=n;i++ifvis[i]{ifv==-l||minw[i]minw[v]v=i;ifv==-lbreak;used[v][from[v]]=used[from[v]][v]=1;vis[v]=1;sum+=minw[v];forinti=l;i=n;i++{if!vis[i]g[v][i]minw[i]{minw[i]=g[v][i];from[i]=v;}ifvis[i]=v{maxw[i][v]=maxw[v][i]=maxmaxw[i][from[v]]minw[v];}returnsum;}intmain{//freopenfuck.innHrnstdin;intT;scanfn%dnT;for;T-;{scanfn%drn;intxyz;forinti=l;i=n;i++{scanf%d%ci%d”,xyz;citys[i]=Cityxyz;}forinti=l;i=n;i++forintj=l;j=n;j++g[i][j]=distcitys[i]citys[j];doublesum=primans=-l;forinti=l;i=n;i++{forintj=i+l;j=n;j++{ifused[i][j]ans=maxanscitys[i].w+citys[j].w/sum-g[i][j];elseans=maxanscitys[i].w+citys[j].w/sum-maxw[i][j];}}printfH%.21f\nans;return0;}最大流Dinic#includequeue#includecstdio#includevector#includestring#includecstring#includeiostreamusingnamespacestd;typedeflonglongLL;constintINF=0x3f3f3f3f;constintN=23«1;intnma[N]b[N]ans[N][N];structgragh{structEdge{intfromtocapflow;Edgeintuintvintcintf:fromutovcapcflowf{}};intst;//0=s1〜nAn+1〜n+mPn+m+l=tvectorEdgeedges;vectorintG[N];//graghboolvis[N];//usewhenbfsintd[N]cur[N];//dist4nowedgeuseindfsinlinevoidAddEdgeintfrominttointcap{edges.push_backEdgefromtocap0;edges.push_backEdgetofrom00;inttop=edges.size;G[from].push_backtop-2;G[to].push_backtop-1;}inlineboolBFS{memsetvis0sizeofvis;queueintQ;Q.pushs;d[s]=0;vis[s]=l;while!Q.empty{intx=Q.front;Q.pop;forinti=0;iG[x].size;i++{Edgee=edges[G[x][i]];ifvis[c.to]||c.cap=c.flowcontinue;vis[e.to]=1;d[e.to]=d[x]+1;Qpushe.to;}}returnvis[t];inlineintDFSconstintxinta{//printfndfs:%d%d\n”,xa;ifx==t||a==9{returna;}intflow=0f;forinti=cur[x];iG[x].size;i++{Edgee=edges[G[x][i]];ifd[x]+1!=d[e.to]continue;iff=DFSe.tozminae.cap-e.flow=0continue;e.flow+=f;edges[G[x][i]Al].flow-=f;//caflow+=f;a-=f;ifa==0break;}returnflow;inlineintmaxflow{returnMaxflowst;}inlineintMaxflowconstintsconstintt{intflow=0;memsetans0sizeofans;whileBFS{memsetcur0sizeofcur;intf=DFSsINF;flow+=f;}forinti=0;Kedges.size;i++{Edgee=edges[i];ans[e.from][e.to-n]+=e.flow;}returnflow;inlinevoidInit{s=0t=n+m+1;㊀dg㊀s・clear;forinti=0;i=m+n+l;i++G[i].clear;forinti=l;i=n;i++AddEdgesia[i];forinti=l;i=m;i++AddEdgei+ntb[i];forinti=l;i=n;i++forintj=l;j=m;j++AddEdgeij+nz19;g;Truck最大生成树+LCA#includecstdio#includevector#includecstring#includeiostream#includealgorithmusingnamespacestd;constintINF=0x3f3f3f3f;constintN=le5+5;intnm;structgragh{structEdge{intfromtow;Edge{}Edgeintxintyintz:fromxtoywz{}booloperatorconstEdgesaconst{returnwa.w;}edges[N]be[N];intEf[N]zfa[N]
[20]fdi[N]
[20]dep[N];boolvis[N];vectorintG[N];intFintx{//皓returnf[x]==xx:f[x]=Ff[x];inlinevoidlinkintxintyintz{edges[++E]=EdgexyAz;G[x].push_backE;}voidbuild{E=0;forinti=l;i=n;i++G[i].clear;intxyz;forinti=l;i=n;i++f[i]=i;forinti=l;i=m;i++{scanfn%d%d%dnyz;be[i]=Edgexzyzz;f[Fx]=Fy;voidkruskal{inttreenum=0;//forestsmemsetvis0sizeofvis;forinti=l;i=n;i++if!vis[Fi]{treenum++;vis[Fi]=1;}forinti=l;i=n;i++f[i]=i;sortbe+1be+m+l;intent=0;forinti=m;i=l;i--{intx=be[i].from;inty=be[i].to;ifFx==Fycontinue;f[Fx]=Fy;cnt++;linkxybe[i].w;linkyzxbe[i].w;ifcnt==n-treenumbreak;}voiddfsintx{vis[x]=1;forinti=l;i=17;i++{ifdep[x]«ibreak;fa[x][i]=fa[fa[x][i-1]][i-1];di[x][i]=mindi[x][i-1]di[fa[x][i-1]][i-1];forinti=0;iG[x].size;i++{Edgee=edges[G[x][i]];ifvis[e.to]continue;fa[e.to]
[0]=x;di[e.to]
[0]=e.w;dep[e.to]=dep[x]+1;dfse.to;}}intleaintxinty{ifdep[x]dep[y]swapxy;intt=dep[x]-dep[y];forinti=0;i=17;i++ifl«itx=fa[x][i];forinti=17;i=0;i--iffa[x][i]=fa[y][i]{x=fa[x][i];y=fa[y][i];ifx==yreturnx;returnfa[x]
[0];}intaskintxintf{//f:fatherintans=INF;intt=dep[x]-dep[f];forinti=0;i=17;i++iftl«i{ans=minansdi[x][i];x=fa[x][i];}returnans;}voidwork{build;kruskal;memsetvis0sizeofvis;forinti=l;i=n;i++ifvis[i]dfsi;intqxy;scanfH%dq;whileq--{scanf%d%dny;ifFx=Fyputsn-ln;elseintt=leaxry;x=askxt;y=askyt;printfn%d\nnminxy;}}}g;intmain{//freopenntruck.instdin;//freopentruck.outnwnstdout;for;~scanfH%d%dnnm;g.work;return;背包#includecstdio#includecstring#includealgorithmusingnamespacestd;constintN=100007;structnode{intvwzn;node{}nodeintxintyintz{v=xw=yn=z;}}a[N];intf[N];intmain{//freopennfuck.innnrstdin;intcashnxy;for;~scanfn%d%dnrcashn;{intA=0;forinti=l;i=n;i++{scanf%d%d”xy;forintt=0;l«tx;t++{inttt=l«t;a[++A]=nodey*tty*tt1;x-=tt;}ifxa[++A]=nodey*xy*xr1;}memsetf0sizeoff;//01背包forinti=l;i=A;i++forintj=cash;j=a[i]f[j]=maxf[j]f.v]+a[i].w;intans=0;//getansforinti=0;i=cash;i++ans=maxansf[i];printfn%d\nnans;return0;多重背包通用模板(单调队列)intf[N];intva[N]rvb[N];//MAX_VvoidpackintVrintvrintwzintn{ifn==0||v==0return;ifn==l{//01背包forinti=V;i=v;-if[i]=maxf[i]f[i-v]+w;return;ifn*v=V-v+l{//多重背包n=V/vforinti=v;i=V;++if[i]=maxf[i][i-v]+w;return;forintj=0;jv;++j{int*pb=va*pe=va-1;int*qb=vb*qe=vb-1;forintk=ji=0;k=V;k+=vr++i{ifpe==pb+n{if*pb==*qb++qb;++pb;}inttt=f[k]-i*w;*++pe=tt;whileqe=qb*qett--qe;*++qe=tt;f[k]=*qb+i*w;}//主程序调用memsetf0sizeoff;//packforinti=l;i=n;i++packcashza[i].va[i].wa[i].n;intans=0;//gctAnsforinti=0;i=cash;i++ans=maxansf[i];printfn%d\nnans;//Meisell-Lehmer//G++218ms43252k高斯消元,判断有无解的#includecstdio#includecmath#includecstring#includeiostream#includevectorusingnamespacestd;typedeflonglongLL;constdoubleEPS=le-6;constintN=55;structmatrix{inta[N][N];introwcol;matrix:rowNcolN{memseta0sizeofa;}matrixintxrinty:rowxcoly{memseta0sizeofa;}int*operator[]intx{returna[x];}voidprint{forinti=0;irow;i++{forintj=0;jcol;j++printf%dna[i][j];puts;putsnn;}};intGaussmatrixaintmintn{intx_cnt=0;intcolfk;//col为列号,k为行号fork=0col=0;kmcoln;++k++col{intr=k;//r为第col列的一个1forinti=k;im;++iifa[i][col]r=i;if•a[r][col]{k--;continue;}ifr!=kforinti=col;i=n;++iswapa[r][i]a[k][i];forinti=k+l;im;++iifa[i][col]//消元forintj=col;j=n;++ja[i][j]A=a[k][j];}forinti=k;im;++iifa[i][n]return-1;ifk=nreturnn-k;//返回自由元个数#includecstdio#includecmathusingnamespacestd;#defineLLlonglongconstintN=5e6+2;boolnp[N];intprime[N]rpi[N];intgetprimeintent=0;np
[0]=np
[1]=true;pi
[0]=pi
[1]=0;forinti=2;iN;++iif!np[i]prime[++cnt]=i;pi[i]=ent;forintj=1;j=enti*prime[j]N;++jnp[i*prime[j]]=true;ifi%prime[j]==0break;}returnent;}constintM=7;constintPM=2*3*5*7*11*13*17;intphi[PM+1][M+1]sz[M+1];voidinitgetprime;sz
[0]=1;forinti=0;i=PM;++iphi[i]
[0]=i;forinti=1;i=M;++isz[i]=prime[i]*sz[i-1];forintj=1;j=PM;++jphi[j][i]=phi[j][i-1]-phi[j/prime[i]][i-1];}intsqrt2LLxLLr=LLsqrtx-
0.1;whiler*r=x++r;}intsqrt3LLxLLr=LLcbrtx-
0.1;whiler*r*r=x++r;returnintr-1;}LLgetphiLLxintsifs==0returnx;ifs=Mreturnphi[x%sz[s]][s]+x/sz[s]*phi[sz[s]][s];ifx=prime[s]*prime[s]returnpi[x]-s+1;ifx=prime[s]*prime[s]*prime[s]xNints2x=pi[sqrt2x];LLans=pi[x]-s2x+s-2*s2x-s+1/2;forinti=s+1;i=s2x;++ians+=pi[x/prime[i]];returnans;}returngetphixrs-1-getphix/prime[s]s-1;LLgetpiLLx{ifxNreturnpi[x];LLans=getphixpi[sqrt3x]+pi[sqrt3x]-1;forinti=pi[sqrt3x]+1red=pi[sqrt2x];i=ed;++ians-=getpix/prime[i]-i+1;returnans;}LLlehmer_piLLxifxNreturnpi[x];inta=intlehmer_pisqrt2sqrt2x;intb=intlehmer_pisqrt2x;intc=intlehmer_pisqrt3x;LLsum=getphixza+LLb+a-2*b-a+1/2;forinti=a+1;i=b;i++{LLw=x/prime[i];sum-=lehmer_piw;ificcontinue;LLlim=lehmer_pisqrt2w;forintj=i;j=lim;j++sum-=lehmer_piw/prime[j]-j-1;returnsum;intmain{init;LLn;while~scanf,n{printfn%lld\nnlehmer_pin;}return0;}高斯消元,求出一组解的#includeiostream#includealgorithm#includecstdio#includecstring#includecmathusingnamespacestd;constintN=1010;constdoubleEPS=le-7;intmn;doublea[N][N]x[N];intGaussintmintn{intcol=0k=0;//col为歹!J号,k为行号for;kmcoln;++kf+4-col{intr=k;forinti=k+l;im;++iiffabsa[i][col]fabsa[r][col]r=i;iffabsa[r][col]EPS{k--/continue;}//歹U全为0ifr!=kforinti=col;i=n;++iswapa[k][i]fa[r][i];forinti=k+l;im;++i//消元iffabsa[i][col]EPS{doublet=a[i][col]/a[k][col];forintj=col;j=n;j++a[i][j]-=a[k][j]*t;a[i][col]=0;}forinti=k;im;++i//无解iffabsa[i][n]EPSreturn-1;ifknreturnn-k;//自由元个数forinti=n-l;i=0;i--{//回带求解doubletemp=a[i][n];forintj=i+l;jn;++jtemp-=x[j]*a[i][j];x[i]=temp/a[i][i];}return0;Manacher算法#includecstdio#includestring#includecstring#includeiostream#includealgorithmusingnamespacestd;constintN=233333;//20W//在n时间内算出以每个点为中心的最大回文串长度intManacherstringst{intlen=st.size;int*p=newint[len+1];memsetpsizeofp;intmx=0id=0;forinti=l;i=len;i++{ifmxip[i]=minp[2*id-i]mx-i;elsep[i]=1;whilest[i+p[i]]==st[i-p[i]]p[i]++;ifi+p[i]mx{mx=i+p[i];id=i;}}intma=0;forinti=l;ilen;i++ma=maxmap[i];deletep;returnma;intmain{//freopenfuck.in,stdin;charst[N];while〜scanf%sst{stringstO=n$#n;forinti=0;st[i]!=!\01;i++{stO+=st[i];stO+=n;}printf71%d\nnManacherstO;}return;KMP字符串匹配#includecstdio#includecstringusingnamespacestd;typedeflonglong11;constintN=100007;constintP=1000000007;chara[N]b[N];boolmat[N];intnext[N];11f[N];voidgetNextintm{inti=0j=-l;next
[0]=l;whileim{ifj==-U|b[i]==b[j]{ifb[++i]!=b[++j]next[i]=j;elsenext[i]=next[j];}elsej=next[j];}}voidKMPintnrintm{memsetmat0sizeofmat;inti=0j=0;getNextm;whileinjm{ifj==-l||a[i]==b[j]i++j++;elsej=next[j];ifjbreak;ifj==m{mat[i]=1;//printfmat[%d]get\nni;j=next[j];线段树ZKW大法#includecstdio#includecstring#includeiostream#includealgorithmusingnamespacestd;constintINF=0x3f3f3f3f;constintN=3000100;structlinetree{#define1ctl#definerctlA1intmi[N]ZM;inlinevoidbuildintn{M=1;whileMnM«=l;M--;memsetmirINFrsizeofmi;forinti=l+M;i=n+M;i++scanf%dnmi[i];forintt=M;t=l;t--mi[t]=minmi[1c]mi[rc];}voidchangeinttintx{formi[t+=M]=xt»=1;t;t»=lmi[t]=minmi[1c]mi[rc];}intqueryint1intr{intans=INF;for1+=M-1r+=M+l;1ArA1;1»=1r»=l{ifans=minansmi[1A1];ifrlans=minansmi[rA1];returnans;}}T;intmain{intnqordxy;for;~scanfM%dnn;{T.buildn;forscanf,q;q--;{scanf%d%d%dordxy;ifordT.changexzy;elseprintfn%d\nnrT.queryxy;}}return;线段树RMQ#includecstdio#includecstring#includeiostream#includealgorithmusingnamespacestd;constintINF=0x3f3f3f3f;constintN=600100;intnansa[N];structnode{intnode{}nodeintxintyrintz{l=x;r=y;id=z;}}b[N]c[N];inlineboolcmplnodeanodeb{returna.lb.1;}inlineboolcmp2nodeanodeb{returna.rb.r;}structlinetree{#define1ctl#definerctlA1#definemid1[t]+r[t]1int1[N]r[N]ma[N]mi[N]Mta[N]ti[N];inlinevoidbuildintn{M=1;whileMnM«=l;M--;memsetmar0sizeofma;memsetmi,工NFsizeofmi;memsetta0sizeofta;memsetti工NFsizeofti;forinti=l+M;i=M*2+l;i++l[i]=r[i]=i-M;forintt=M;t=l;t--l[t]=l[lc]r[t]=r[rc];}inlinevoiddownintt{iftMreturn;//leafnodema[1c]=maxma[1c]ta[t];ma[rc]=maxma[rc]ta[t];ta[1c]=maxta[1c]ta[t];ta[rc]=maxta[rc]ta[t];ta[t]=0;mi[1c]=minmi[1c]ti[t];mi[rc]=minmi[rc]ti[t];ti[1c]=minti[1c]ti[t];ti[rc]=minti[rc]ti[t];ti[t]=INF;}inlinevoidmaintainintt{ma[t]=maxma[1c]ma[rc];mi[t]=minmi[1c]mi[rc];}inlinevoidtaginttrintx{ma[t]=maxma[t]zx;mi[t]=minmi[t]x;ta[t]=maxta[t]x;ti[t]=minti[t]x;}voidchangeinttintLintRzintx{ifL=1[t]r[t]=R{tagtx;return;}//indownt;ifL=midchangelcLRx;ifmidRchangercALRzx;maintaint;}voidqueryintt{iftM{//leafnodeb[t-M]=c[t-M]=nodemi[t]zma[t]t-M;return;downt;query1c;queryrc;maintaint;}}T;。