首页 > 代码库 > 【模板】OI基本模版
【模板】OI基本模版
这里发一些基本的模版,就这样~
1. 0-1背包
int bag_01() { //01背包 for(int i = 1; i <= n; i++) for(int j = c; j >= w[i]; j--) f[j] = max(f[j], f[j-w[i]]+v[i]); return f[c];}//对于完全背包(物品不限):将第二个循环的顺序反向即可。
2. 二分查找
//这是找最大int Binary_Search(int Left, int Right) { while(Left <= Right) { int Mid = (Left + Right) / 2; if(check(Mid)) Left = Mid + 1; else Right = Mid - 1; } return Left - 1;}//这是找最小int Binary_Search(int Left, int Right) { while(Left <= Right) { int Mid = (Left + Right) / 2; if(check(Mid)) Right = Mid - 1; else Left = Mid + 1; } return Right + 1;}
3. 计算n的因子个数
int calc(int n){ //calc(n) : 计算n的因子个数 int ans=1, t; for (int i=2; i*i<=n; i++){ for (t=0; n%i==0; n/=i) t++; ans*=t+1; } if (n>1) ans*=2; return ans;}
4. 最大公约数
int gcd(int a, int b) { return b ? gcd(b, a%b) : a; }//gcd函数返回a和b的最大公约数(a>b) 最小公倍数=a*b/gcd(a,b)
5. 最长公共子序列
int LCS() { for(int i = 1; i <= xl; i++) for(int j = 1; j <= yl; j++) if(x[i] == y[j]) f[i%2][j] = f[(i-1)%2][j-1]+1; else f[i%2][j]=max(f[(i-1)%2][j],f[i%2][j-1]); return f[xl%2][yl];}
6. 筛法求素数
void prime(int n) { //筛法求素数表 for(int i = 2; i <= sqrt(n); i++) if(!p[i]) for(int j = i+i; j <= n; j += i) p[j] = 1;}//p[i]=0:该数是素数;p[i]=1:该数不是素数
7. 快速幂
int quickpow(int a, int b, int m){ //快速幂 求a^b%m的值 int t=1; while (b){ if (b&1) t=t*a%m; b>>=1; a=a*a%m; } return t;}
8. 快速读入整数
inline void read(int& x){ char c=getchar(); int f=1,num=0; for(;c<‘0‘||c>‘9‘;c=getchar()) if(c==‘-‘)f=-1; for(;c>=‘0‘&&c<=‘9‘;c=getchar()) num=num*10+c-‘0‘; x=num*f;}
这些都是最基本的模版哦!如果有什么其他的有用的模版欢迎在评论区中提出哦!
【模板】OI基本模版
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。