代码模板(持续更新)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码模板(持续更新)相关的知识,希望对你有一定的参考价值。

字符串:

  KMP算法:

 1 int Next[maxn];
 2 
 3 void Get_Next(char *S,int len)
 4 {
 5     int i=0,j=-1;
 6     Next[0]=-1;
 7     while(i<len)
 8     {
 9         if(j==-1||S[i]==S[j])
10         {
11             i++;j++;Next[i]=j;
12         }
13         else j=Next[j];
14     }
15 }
16 
17 void KMP(char *S,char *T,int lens,int lent)
18 {
19     Get_Next(T,lent);
20     int i=0,j=0;
21     while(i<lens)
22     {
23         if(j==-1||S[i]==T[j])
24         {
25             i++;j++;
26         }
27         else j=Next[j];
28         if(j==lent)
29         {
30             printf("%d\n",i-lent+1);
31         }
32     }
33 }

  EX_KMP:

 1 int Next[maxn],ext[maxn];
 2 
 3 void Get_Next(char *S,int len)
 4 {
 5     int k=0;Next[0]=len;
 6     while(k+1<len&&S[k]==S[k+1]) k++;
 7     Next[1]=k;k=1;
 8     for(int i=2;i<len;i++)
 9     {
10         if(Next[i-k]+i<Next[k]+k) Next[i]=Next[i-k];
11         else
12         {
13             int j=max(0,Next[k]+k-i);
14             while(i+j<len&&S[i+j]==S[j]) j++;
15             Next[i]=j;k=i;
16         }
17     }
18 }
19 
20 void EXKMP(char *S,char *T,int *extend,int lens,int lent)
21 {
22     Get_Next(T,lent);
23     int k=0;
24     while(k<lens&&k<lent&&S[k]==T[k]) k++;
25     extend[0]=k;k=0;
26     for(int i=1;i<lens;i++)
27     {
28         if(Next[i-k]+i<extend[k]+k) extend[i]=Next[i-k];
29         else
30         {
31             int j=max(0,extend[k]+k-i);
32             while(i+j<lens&&j<lent&&S[i+j]==T[j]) j++;
33             extend[i]=j;k=i;
34         }
35     }
36 }

 

图论:

  匈牙利算法:

 1 vector<int> G[maxn];
 2 int vis[maxn],l[maxn];
 3 
 4 bool dfs(int u)
 5 {
 6     int len=G[u].size();
 7     for(int i=0;i<len;i++)
 8     {
 9         int v=G[u][i];
10         if(!vis[v])
11         {
12             vis[v]=1;
13             if(l[v]==-1||dfs(l[v]))
14             {
15                 l[v]=u;return true;
16             }
17         }
18     }
19     return false;
20 }
21 
22 int hungary(int n)
23 {
24     memset(l,-1,sizeof(l));
25     int cnt=0;
26     for(int i=1;i<=n;i++)
27     {
28         memset(vis,0,sizeof(vis));
29         if(dfs(i)) cnt++;
30     }
31     return cnt;
32 }

 

以上是关于代码模板(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章

代码模板(持续更新)

知识学习我的OJ代码库和ACM模板,持续更新中

2020/2/17 zzcms8.2 PHP代码审计(持续更新)

BootStrap有用代码片段(持续总结)

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段1——vue主模板