码迷,mamicode.com
首页 > 其他好文 > 详细

代码模板(持续更新)

时间:2017-03-17 10:58:41      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:size   模板   bool   hungary   字符串   ems   kmp算法   extend   printf   

字符串:

  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 }

 

代码模板(持续更新)

标签:size   模板   bool   hungary   字符串   ems   kmp算法   extend   printf   

原文地址:http://www.cnblogs.com/demonhunter/p/6564479.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!