一些模板

Posted warmingtxdy

tags:

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

string 操作:

 1 =,assign()   //赋以新值
 2 s.assign(str); 
 3 s.assign(str,1,3);//如果str是”iamangel” 就是把”ama”赋给字符串
 4 s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给s
 5 s.assign(“gaint”); 
 6 s.assign(“nico”,5);//把’n’ ‘I’ ‘c’ ‘o’ ‘\0’赋给字符串
 7 s.assign(5,’x’);//把五个x赋给字符串
 8 b) swap()   //交换两个字符串的内容
 9 c) +=,append(),push_back() //在尾部添加字符
10 d) insert() //插入字符
11 e) erase() //删除字符
12 g) replace() //替换字符
13 h) +//串联字符串
14 ==,!=,<,<=,>,>=,compare()  //比较字符串
15 string s(“abcd”);
16     s.compare(“abcd”); //返回0
17     s.compare(“dcba”); //返回一个小于0的值
18     s.compare(“ab”); //返回大于0的值
19     s.compare(s); //相等
20     s.compare(0,2,s,2,2); //用”ab”和”cd”进行比较 小于零
21     s.compare(1,2,”bcx”,2); //用”bc”和”bc”比较。
22 j) size(),length()  //返回字符数量
23 r) copy() //将某值赋值为一个C_string
24 s) c_str() //将内容以C_string返回
25 u) substr() //返回某个子字符串
26     s.substr(11);//从索引11往后的子串
27     s.substr(5,6);//从索引5开始6个字符
28 k)find()
29 string::size_type position;  
30 position = s.find("xx");  
31 //查找s 中flag 出现的所有位置。  
32  flag="a";  
33 position=0;  
34 while((position=s.find_first_of(flag,position))!=string::npos)  
35   
36 //position=s.find_first_of(flag,position);  
37 cout<<"position  : "<<position<<endl;  
38 position++;  
39    

GCD :

int gcd(int x,int y)
    return y?gcd(y,x%y):x;
 

LCM :

int lcm(int a,int b) return a*b/gcd(a,b);  

扩展欧几里得 :

 1 int exgcd(int a, int b, int& x, int& y)//a*x+b*y=gcd(a,b)=d;(x,y)为其一组整数解
 2     int d = a;
 3     if(b != 0)
 4         d = exgcd(b, a % b, y, x);
 5         y -= (a / b) * x;
 6     else 
 7         x = 1;
 8         y = 0;
 9     
10     return d;
11 

快速幂 :

 1 ll quick_power(ll base, ll n)
 2     ll res = 1;
 3     while (n > 0)
 4         if (n & 1)
 5             res *= base; // res = (res * base) % mod;
 6         base *= base; //base = (base * base) % mod;
 7         n >>= 1;
 8     
 9     return res;
10 

矩阵快速幂 :

 1 int mod;
 2 int n,m,sum;
 3 struct mtix
 4     int a[maxn][maxn];
 5     mtix()memset(a,0,sizeof(a));
 6 f;
 7 mtix mul(mtix a,mtix b)
 8     mtix c;
 9     for (int i=1;i<=n;i++)
10         for (int j=1;j<=n;j++)
11             for (int k=1;k<=n;k++)
12             c.a[i][j]+=(a.a[i][k]*b.a[k][j])%mod;c.a[i][j]%=mod;
13     return c;
14 
15 mtix mpow(int y)
16     mtix ans;
17     mtix tem=f;
18     for (int i=1;i<=n;i++)
19         ans.a[i][i]=1;
20     for (;y;tem=mul(tem,tem),y>>=1)
21         if (y&1) ans=mul(ans,tem);
22     for (int i=1;i<=n;i++)
23         sum+=ans.a[i][i];
24     cout<<sum%mod<<endl;
25     return ans;
26 
27 int main()
28     cin>>n>>m;
29     for (int i=1;i<=n;i++)
30         for (int k=1;k<=n;k++)
31             cin>>f.a[i][k];
32     mpow(m);
33 

最长公共子序列LCS :

 1 char a[1010],b[1010];
 2 int dp[1010][1010];
 3 int main()
 4     int lena,lenb,i,j;
 5     while(scanf("%s%s",&a,&b)!=EOF)
 6         lena=strlen(a);
 7         lenb=strlen(b);
 8         memset(dp,0,sizeof(dp));
 9         for(i=1;i<=lena;++i)
10             for(j=1;j<=lenb;++j)
11                 if(a[i-1]==b[j-1])
12                     dp[i][j]=dp[i-1][j-1]+1;
13                 else
14                     dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
15             
16         
17         printf("%d\n",dp[lena][lenb]);
18     
19     return 0;
20 

最短路Floyd :

1 for (int k = 1; k <= n; k++) 
2     for (int i = 1; i <= n; i++) 
3         if (i == k) continue;
4         for (int j = 1; j <= n; j++) 
5             if (i == j || k == j) continue;
6             dis[i][j] = min(dis[i][j], dis[i][k]+ dis[k][j]);
7         
8     
9 

并查集 :

 1 int pre[maxn];
 2 int tot[maxn];//集合元素数量
 3 int Rank[maxn];//集合排名
 4 int n,m,k;
 5 void init()
 6     for(int i=1;i<=n;++i)
 7         pre[i]=i;
 8         tot[i]=1;
 9     
10     mst(Rank,0);
11 
12 int find(int x)
13     if(x==pre[x])
14         return x;
15     else
16         return pre[x]=find(pre[x]);
17 
18 
19 void join(int x, int y)
20     x = find(x);
21     y = find(y);
22     if (Rank[x] > Rank[y])
23         pre[y] = x;
24         if (x != y)
25             tot[x] += tot[y];
26     
27     else
28         pre[x] = y;
29         if (x != y)
30             tot[y] += tot[x];
31         if (Rank[x] == Rank[y])
32             Rank[y] += 1;
33     
34 

SG 打表 :

 1 //f[]:可以取走的石子个数
 2 //sg[]:0~n的SG函数值
 3 //vis[]:mex
 4 int f[maxn],sg[maxn],vis[maxn];
 5 void getSG(int n)
 6     int i,j;
 7     memset(sg,0,sizeof(sg));
 8     for(i=1;i<=n;i++)
 9         memset(vis,0,sizeof(vis));
10         for(j=1;f[j]<=i&&f[j]<=m;j++) //注意加f[i]的限定条件,此处为f[j]<=m
11             vis[sg[i-f[j]]]=1;
12         for(j=0;j<=n;j++)    //求mes中未出现的最小的非负整数
13             if(vis[j]==0)
14                 sg[i]=j;
15                 break;
16             
17         
18         //cout<<i<<" "<<sg[i]<<endl;
19     
20 

SG_DFS :

 1 //注意 S数组要按从小到大排序 SG函数要初始化为-1 对于每个集合只需初始化1遍
 2 //n是集合s的大小 S[i]是定义的特殊取法规则的数组
 3 int s[110],sg[10010],n;
 4 int SG_dfs(int x)
 5 
 6     int i;
 7     if(sg[x]!=-1)
 8         return sg[x];
 9     bool vis[110];
10     memset(vis,0,sizeof(vis));
11     for(i=0;i<n;i++)
12     
13         if(x>=s[i])
14         
15             SG_dfs(x-s[i]);
16             vis[sg[x-s[i]]]=1;
17         
18     
19     int e;
20     for(i=0;;i++)
21         if(!vis[i])
22         
23             e=i;
24             break;
25         
26     return sg[x]=e;
27 

 

以上是关于一些模板的主要内容,如果未能解决你的问题,请参考以下文章

对一些页面使用 thymeleaf 模板,对一些页面使用休息来构建 gradle 项目

浅窥C++模板编程

一些模板

关于ueditor的一些用法,及模板使用方面的一些总结

为 Django 模板定义 API?

django之Template(模板)