各种乱七八糟的模板 【不定期补充】[C++语言描述]
来源:互联网 发布:mac里面xp升级win7 编辑:程序博客网 时间:2024/05/22 23:59
矩阵快速幂
struct Matrix{ // int r,c; //C行R列 LL m[66][66];};Matrix operator * (Matrix a,Matrix b){ Matrix c; for(int i=0; i<M; i++) //初始化矩阵 for(int j=0; j<M; j++) c.m[i][j]= 0; for(int k=0; k<M; k++) for(int i=0; i<M; i++) //实现矩阵乘法 { if(a.m[i][k] <= 0) continue; //剪枝 for(int j=0; j<M; j++) { // if(b.m[k][j] <= 0) continue; //剪枝 c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j]+MOD)%MOD; } } return c;}Matrix operator ^ (Matrix a,LL b){ Matrix c; for(int i=0; i<n; i++) //初始化单位矩阵 for(int j=0; j<n; j++) c.m[i][j] = c.m[i+n][j+n] = ( i == j ); while(b) { if(b&1) c= c * a ; b >>= 1; a = a * a ; } return c;}Matrix operator + (Matrix a,Matrix b){ for(int i=0; i<M; i++) for(int j=0; j<M; j++) a.m[i][j]=(a.m[i][j]+b.m[i][j]+MOD)%MOD; return a;}
博弈SG函数
(一) 记忆化搜索dfs版
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;//注意 S数组要按从小到大排序 SG函数要初始化为-1 对于每个集合只需初始化1边//不需要每求一个数的SG就初始化一边int SG[10100],n,m,s[102],k;//k是集合s的大小 S[i]是定义的特殊取法规则的数组int dfs(int x)//求SG[x]模板{ if(SG[x]!=-1) return SG[x]; bool vis[110]; memset(vis,0,sizeof(vis)); for(int i=0;i<k;i++) { if(x>=s[i]) { dfs(x-s[i]); vis[SG[x-s[i]]]=1; } } int e; for(int i=0;;i++) if(!vis[i]) { e=i; break; } return SG[x]=e;}int main(){ int cas,i; while(scanf("%d",&k)!=EOF) { if(!k) break; memset(SG,-1,sizeof(SG)); for(i=0;i<k;i++) scanf("%d",&s[i]); sort(s,s+k); scanf("%d",&cas); while(cas--) { int t,sum=0; scanf("%d",&t); while(t--) { int num; scanf("%d",&num); sum^=dfs(num); // printf("SG[%d]=%d\n",num,SG[num]); } if(sum==0) printf("L"); else printf("W"); } printf("\n"); } return 0;}
(二) 预处理打表版
#include<stdio.h>#include<string.h>#include <string>#include <iostream>using namespace std;const int N = 10008;int s[108],t;int sg[N];bool has[N];void sg_solve(int *s,int t,int N) //N求解范围 S[]数组是可以每次取的值,t是s的长度。{ int i,j; memset(sg,0,sizeof(sg)); for(i=1;i<=N;i++) { memset(has,0,sizeof(has)); for(j=0;j<t;j++) if(i - s[j] >= 0) has[sg[i-s[j]]] = 1; for(j=0;j<=N;j++) if(!has[j]) break; sg[i] = j; } return ;}int main(){ int i,j,n,m,h; while(scanf("%d",&t),t) { string ans=""; for(i=0;i<t;i++) scanf("%d",&s[i]); sg_solve(s,t,N); scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&m); int res = 0; for(j=0;j<m;j++) { scanf("%d",&h); res ^= sg[h]; } ans+=res?'W':'L'; } cout<<endl; } return 0;}
1 0
- 各种乱七八糟的模板 【不定期补充】[C++语言描述]
- 各种乱七八糟常用函数的简单用法(不定期更新)
- 【计算几何各种知识点总结】[不定期补充]
- C语言的细节(不定期更新)
- 【ACM模板】——hello_chengdongni 随着姿势提升,不定期补充
- C语言的各种
- C语言的一点补充知识
- 【补充】C语言的发展及其版本
- 【计算几何各种小模板总结贴】[不定期更新]
- c语言中关于指针的一些乱七八糟的代码 VC6中直接编译运行!
- 特殊字符的编码解码,各种编码,乱码各种乱七八糟
- C语言中一些乱七八糟的用法与细节(不断更新)
- C语言基础补充
- C 语言知识补充
- C语言补充学习
- C语言基础知识补充
- 各种语言的关键字----C
- C语言的各种版本
- 欢迎使用CSDN-markdown编辑器
- vs2013 error C3861: “snprintf”: 找不到标识符
- 208. Implement Trie (Prefix Tree)
- 【基础知识思考整理 】MySQLSQL注入(SQL Injection )和防注入
- [Leetcode]278. First Bad Version
- 各种乱七八糟的模板 【不定期补充】[C++语言描述]
- 欧几里得 与 扩展欧几里得
- TabHost
- 天气预报插件
- android MVP模式介绍与实战
- 关于头文件重复包含以及函数重定义问题
- Spark RDD缓存代码分析
- VC课程 第四章 笔记
- 如何修改WAMP中mysql默认空密码