C++各种模板
高精度:
重载运算符版:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int NR=1e4;
char s[NR];
struct Bigint
{
int num[NR];
Bigint()
{
memset(num,,sizeof(num));
num[]=;
}
void read()
{
scanf("%s",s);
num[]=strlen(s);
for(int i=;i<=num[];i++)
num[i]=s[num[]-i]-'';
}
void print()
{
for(int i=num[];i>=;i--)
printf("%d",num[i]);
puts("");
}
Bigint operator + (const Bigint &B) const
{
Bigint c;
c.num[]=max(num[],B.num[]);
for(int i=;i<=c.num[];i++)
{
c.num[i]+=num[i]+B.num[i];
c.num[i+]+=c.num[i]/;
c.num[i]%=;
}
if(c.num[c.num[]+]>)
c.num[]++;
return c;
}
};
int main(void)
{
Bigint a,b,c;
a.read();
b.read();
c=a+b;
c.print();
return ;
}
普通高精度:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int NR=1e3;
char s[NR+];
int a[NR+],b[NR+],c[NR+];
void read(int a[])
{
scanf("%s",s);
a[]=strlen(s);
for(int i=;i<=a[];i++)
a[i]=s[a[]-i]-'';
}
void print(int a[])
{
for(int i=a[];i>=;i--)
printf("%d",a[i]);
puts("");
}
void add(int a[],int b[],int c[])
{
c[]=max(a[],b[]);
for(int i=;i<=c[];i++)
{
c[i]+=a[i]+b[i];
c[i+]=c[i]/;
c[i]%=;
}
if(c[c[]+]>)
printf("%d",c[c[]]+);
}
int main()
{
read(a);
read(b);
add(a,b,c);
print(c);
return ;
}
快速幂:
#include<cstdio>
#include<algorithm>
using namespace std;
long long po(long long x,long long p,long long k)
{
if(p==)
return ;
if(p==)
return x;
int a=po(x,p/,k);
a%=k;
if(p%==)
return (a*a)%k;
return (a*a*x)%k;
}
int main(void)
{
long long x,p,k;
scanf("%lld%lld%lld",&x,&p,&k);
printf("%lld^%lld mod %lld=%lld\n",x,p,k,po(x,p,k)%k);
return ;
}
判断回文数:
#include<cstdio>
using namespace std;
int num[],len;
bool check(int x)
{
int tmp=;
while(x!=)
{
num[++tmp]=x%;
x/=;
len++;
}
for(int i=;i<=len/;i++)
if(num[i]!=num[len+-i])
return false;
return true;
}
int main()
{
int n;
scanf("%d",&n);
if(check(n)==true)
printf("YES\n");
else
printf("NO\n");
return ;
}
并查集:
#include<cstdio>
#include<algorithm>
using namespace std;
const int NR=1e5;
int n,m;
int bin[NR+],tot;
int anc(int x)
{
if(bin[x]==)
return x;
bin[x]=anc(bin[x]);
return bin[x];
}
void link(int u,int v)
{
u=anc(u);
v=anc(v);
if(u!=v)
{
bin[u]=v;
tot--;
}
}
struct road
{
int x,y,t;
void inp()
{
scanf("%d%d%d",&x,&y,&t);
}
friend bool operator < (road A,road B)
{
return A.t<B.t;
}
};
road s[NR+];
void inp()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
s[i].inp();
tot=n;
}
void ask(int u,int v)
{
if(anc(u)==anc(v))
printf("Yes\n");
else
printf("No\n");
}
void calc()
{
sort(s+,s+m+);
int i;
for(i=;i<=m;i++)
{
link(s[i].x,s[i].y);
if(tot==)
goto finish;
}
printf("-1\n");
return;
finish:
printf("%d\n",s[i].t);
}
int main(void)
{
inp();
calc();
return ;
}
归并排序:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int NR=5e5;
int n;
int a[NR+],tmp[NR+];
void marge(int l,int r,int mid)
{
int sum=r-l+,t=;
int disl=l,disr=mid+;
while(disl<=mid&&disr<=r)
{
if(a[disl]>a[disr])
{
t++;
tmp[t]=a[disr];
disr++;
}
else
{
t++;
tmp[t]=a[disl];
disl++;
}
}
while(disl<=mid)
{
t++;
tmp[t]=a[disl];
disl++;
}
while(disr<=r)
{
t++;
tmp[t]=a[disr];
disr++;
}
for(int i=;i<=sum;i++)
a[l+i-]=tmp[i];
return;
}
void cha(int l,int r)
{
if(l==r)
return;
int mid=(l+r)>>;
cha(l,mid);
cha(mid+,r);
marge(l,r,mid);
return;
}
int main(void)
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
cha(,n);
for(int i=;i<=n;i++)
printf("%lld ",a[i]);
puts("");
return ;
}
进制转换:
#include<cstdio>
#include<algorithm>
using namespace std;
int len[],tmp=;
void change(int n,int a,int b)
{
int n_10=;
int fu=n;
while(fu)
{
n_10+=fu%*tmp;
tmp*=a;
fu/=;
}
fu=n_10;
tmp=;
while(fu)
{
len[++tmp]=fu%b;
fu/=b;
}
}
int main()
{
int n,a,b;
scanf("%d%d%d",&n,&a,&b);
change(n,a,b);
for(int i=tmp;i>=;i--)
printf("%d",len[i]);
puts("");
return ;
}
逆元:
#include<cstdio>
#include<algorithm>
using namespace std;
int main(void)
{
int p;
scanf("%d",&p);
int inv[p+];
inv[]=;
for(int i=;i<=p-;i++)
inv[i]=(p-p/i)*inv[p%i]%p;
for(int i=;i<=p-;i++)
printf("%d\n",inv[i]);
return ;
}
分解质因数:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int p[];
int factor(int x,int p[])
{
int cnt=;
for(int i=;i*i<=x;i++)
while(x%i==)
{
p[++cnt]=i;
x/=i;
}
if(x>)
p[++cnt]=x;
return cnt;
}
int main(void)
{
int n;
scanf("%d",&n);
printf("%d\n",factor(n,p));
return ;
}
二叉搜索树:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int NR=1e5;
struct note
{
int val,w;
int lc,rc;
}T[NR+];
int n,cnt,a[NR+];
void ins(int o,int v)
{
if(!T[o].val)
{
T[o].val=v;
T[o].w++;
return;
}
if(T[o].val==v)
{
T[o].val++;
return;
}
if(v<T[o].val)
{
if(!T[o].lc)
T[o].lc=++cnt;
ins(T[o].lc,v);
}
if(v>T[o].val)
{
if(!T[o].rc)
T[o].rc=++cnt;
ins(T[o].rc,v);
}
}
void dfs(int o)
{
if(!T[o].val)
return;
if(T[o].lc)
dfs(T[o].lc);
printf("%d ",T[o].val);
if(T[o].rc)
dfs(T[o].rc);
}
int main(void)
{
scanf("%d",&n);
cnt=;
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
for(int i=;i<=n;i++)
ins(,a[i]);
dfs();
puts("");
return ;
}
线性筛:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(void)
{
int n=;
bool flag[];
memset(flag,false,sizeof(flag));
for(int i=;i<=;i++)
if(flag[i]==false)
{
printf("%d\n",i);
for(int j=;i*j<=n;j++)
flag[i*j]=true;
}
return ;
}
裴蜀定理:
#include<cstdio>
#include<algorithm>
using namespace std;
#define pr pair<int,int>
#define x tmp.first;
#define y tmp.second;
pr exged(int a,int b)
{
if(b==)
return pr(,);
pr tmp=exged(b,a%b);
return pr(y,x-a/b*y);
}
int main(void)
{ return ;
}
哈希碰撞:
#include<cstdio>
#include<algorithm>
using namespace std;
struct brute
{
bool w[];
void ins(int x)
{
w[x]=;
}
void ask(int x)
{
printf("%d\n",w[x]);
}
}
#define ha 233333;
struct naive
{
bool w[ha+];
void ins(int x)
{
w[x%ha]=;
}
void ask(int x)
{
printf("%d\n",w[x%ha]);
}
};
/*naive B;
struct zip
{
vector<bool> w[ha+5];
void ins(int x)
{
w[x%ha]
}
};*/
int main(void)
{ return ;
}
测空间:
#include<cstdio>
#include<algorithm>
using namespace std;
int a[];
int main(void)
{
int sum=sizeof(a);
printf("%d\n",sum//);
return ;
}
一行gcd :
int gcd(int a,int b){ return b ? gcd(b,a%b) : a;}
线段树模板:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
const int NR=1e6;
unsigned ll n,m,a[NR+],ans[*NR+],tag[NR*+];
inline ll ls(ll x)
{
return x<<;
}
inline ll rs(ll x)
{
return x<<|;
}
void scan()
{
scanf("%lld%lld",&n,&m);
for(ll i=;i<=n;i++)
scanf("%lld",&a[i]);
}
inline void push_up(ll p)
{
ans[p]=ans[ls(p)]+ans[rs(p)];
}
void build(ll p,ll l,ll r)
{
tag[p]=;
if(l==r)
{
ans[p]=a[l];
return;
}
ll mid=(l+r)>>;
build(ls(p),l,mid);
build(rs(p),mid+,r);
push_up(p);
}
inline void f(ll p,ll l,ll r,ll k)
{
tag[p]=tag[p]+k;
ans[p]=ans[p]+k*(r-l+);
}
inline void push_down(ll p,ll l,ll r)
{
ll mid=(l+r)>>;
f(ls(p),l,mid,tag[p]);
f(rs(p),mid+,r,tag[p]);
tag[p]=;
}
inline void update(ll nl,ll nr,ll l,ll r,ll p,ll k)
{
if(nl<=l&&r<=nr)
{
ans[p]+=k*(r-l+);
tag[p]+=k;
return;
}
push_down(p,l,r);
ll mid=(l+r)>>;
if(nl<=mid)
update(nl,nr,l,mid,ls(p),k);
if(nr>mid)
update(nl,nr,mid+,r,rs(p),k);
push_up(p);
}
ll query(ll q_x,ll q_y,ll l,ll r,ll p)
{
ll res=;
if(q_x<=l&&q_y>=r)
return ans[p];
ll mid=(l+r)>>;
push_down(p,l,r);
if(q_x<=mid)
res+=query(q_x,q_y,l,mid,ls(p));
if(q_y>mid)
res+=query(q_x,q_y,mid+,r,rs(p));
return res;
}
int main(void)
{
ll a1,b,c,d,e,f;
scan();
build(,,n);
while(m--)
{
scanf("%lld",&a1);
switch(a1)
{
case :
{
scanf("%lld%lld%lld",&b,&c,&d);
update(b,c,,n,,d);
break;
}
case :
{
scanf("%lld%lld",&e,&f);
printf("%lld\n",query(e,f,,n,));
break;
}
}
}
return ;
}
C++各种模板的更多相关文章
- Jade模板引擎让你飞
写在前面:现在jade改名成pug了 一.安装 npm install jade 二.基本使用 1.简单使用 p hello jade! 渲染后: <p>hello jade!</p ...
- ABP入门系列(2)——通过模板创建MAP版本项目
一.从官网创建模板项目 进入官网下载模板项目 依次按下图选择: 输入验证码开始下载 下载提示: 二.启动项目 使用VS2015打开项目,还原Nuget包: 设置以Web结尾的项目,设置为启动项目: 打 ...
- CMS模板应用调研问卷
截止目前,已经有数十家网站与我们合作,进行了MIP化改造,在搜索结果页也能看到"闪电标"的出现.除了改造方面的问题,MIP项目组被问到最多的就是:我用了wordpress,我用了织 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送
微信支付之微信模板消息推送 今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...
- OpenCV模板匹配算法详解
1 理论介绍 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标.OpenCV ...
- 前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定
一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.AngularJS是框架而jQuery则是库. 1.2. ...
- ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案
好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...
- ThinkPHP 模板substr的截取字符串函数
ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码 /** ** 截取中文字符串 **/ function msubstr($str, $start ...
- DDD领域驱动设计 - 设计文档模板
设计文档模板: 系统背景和定位 业务需求描述 系统用例图 关键业务流程图 领域语言整理,主要是整理领域中的各种术语的定义,名词解释 领域划分(分析出子域.核心域.支撑域) 每个子域的领域模型设计(实体 ...
随机推荐
- bfs--P1301 魔鬼之城
*传送 求最小步数,bfs求解.因为题目要求可以走八个方向(上下左右和对角线),所以两个方位数组来找八个方向 int dirx[9]={0,0,1,1,1,0,-1,-1,-1}; int diry[ ...
- C#应用程序结构
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- jar包-循环遍历-开机启动服务-微服务-多项目拷贝-pid杀死进程-mysql备份脚本-防火墙检测脚本
vi /root/serverkaiji.sh #!/bin/bash ls /tlvnksc/ | egrep -v "^c|^f" > /root/service.lis ...
- [题解] LuoguP4841 [集训队作业2013]城市规划
Description 求\(n\)个点无重边.无自环.带标号的无向联通图个数,对\(1004535809\)(\(479 \times 2^{21} + 1\))取模.\(n \le 130000\ ...
- docker搭建redis主从集群和sentinel哨兵集群,springboot客户端连接
花了两天搭建redis主从集群和sentinel哨兵集群,讲一下springboot客户端连接测试情况 redis主从集群 从网上查看说是有两种方式:一种是指定配置文件,一种是不指定配置文件 引用地址 ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 变量作用域
作用域是程序的一个区域,一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量. 在函数参数的定义中声明的变量,称为形式参数. 在所有函数外部声明的变量,称为全局变量. 局部 ...
- Spring创建Bean的顺序
一直对Spring创建bean的顺序很好奇,现在总算有时间写个代码测试一下.不想看过程的小伙伴可以直接看结论 目录结构: 其中:bean4.bean5包下的class没有注解@Component,测试 ...
- MyBatis 关联查询的实现:多对多
2个实体:订单.商品,一个订单可以包含多种商品,同时一种商品可以属于多个订单,即多对多. 商品表goods_tb: 订单表order_tb: no是订单编号,user_id与用户表的id关联. 需要新 ...
- ZJNU 2340/2341/2343 - 罗小黑的“礼物”Ⅰ/Ⅱ/Ⅲ
把一位数.两位数.三位数……这些所在的范围分开判断 可得1~9这些数范围在[1,9]内 10~99内共有90个数,每个数占两位,所以共有180位在,范围在[10,189]内 同理,100~999内共有 ...
- JavaScript—面向对象 贪吃蛇_2 食物对象
食物对象 //自调用 (function (){ function Food(element) { this.width = 20 this.height = 20 this.backgroundCo ...