C++常用模板
常用模板:
数学:
1. 组合数
组合数
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1e3+10,mod=998244353;
ll n,a[N],jc[N],dp[N],ans;
void init(){
jc[0]=1;
for(int i=1;i<N;i++) jc[i]=jc[i-1]*i%mod;
}
ll ksm(ll a,ll b){
ll ct=1;
while(b){
if(b&1) ct=ct*a%mod;
b>>=1,a=a*a%mod;
}
return ct;
}
ll C(ll n,ll m){
return jc[n]*ksm(jc[n-m],mod-2)%mod*ksm(jc[m],mod-2)%mod;
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n;init();
for(int i=1;i<=n;i++) cin>>a[i];
return 0;
}
2. 矩阵
矩阵
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=1e9+7;
const ll N=110;
ll n,k;
struct Fbn{
ll a[N][N]={};
Fbn operator*(const Fbn &b){
Fbn s;
for(ll l=1;l<=n;l++)
for(ll i=1;i<=n;i++)
for(ll j=1;j<=n;j++)
s.a[i][j]=(s.a[i][j]+a[i][l]*b.a[l][j]%mod)%mod;
return s;
}
}ans,base;
ll ksm(ll p){
while(p){
if(p&1) ans=ans*base;
base=base*base;
p>>=1;
}
return 0;
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n>>k;
for(ll i=1;i<=n;i++)
for(ll j=1;j<=n;j++)
cin>>base.a[i][j];
for(ll i=1;i<=n;i++) ans.a[i][i]=1;
ksm(k);
for(ll i=1;i<=n;i++){
for(ll j=1;j<=n;j++)
cout<<ans.a[i][j]<<" ";
cout<<"\n";
}
return 0;
}
3. 逆元
逆元
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=3e6+10;
ll n,p,dp[N];
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n>>p;
dp[1]=1;
for(ll i=2;i<=n;i++)
dp[i]=(p-p/i)*dp[p%i]%p;
for(ll i=1;i<=n;i++)
cout<<dp[i]<<"\n";
return 0;
}
数据结构
1. 线段树
线段树
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1e5+10;
ll b,p,q,k,n,m,t[N*4],a[N],lazy[N*4];
void build(ll rt,ll l,ll r){
if(l==r){t[rt]=a[l];return;}
ll mid=l+r>>1;
build(rt<<1,l,mid);
build((rt<<1)+1,mid+1,r);
t[rt]=t[rt<<1]+t[(rt<<1)+1];
}
void fun(ll rt,ll l,ll r,ll v){
t[rt]+=(r-l+1)*v;
lazy[rt]+=v;
}
void pushdown(ll rt,ll l,ll r){
ll mid=l+r>>1;
fun(rt<<1,l,mid,lazy[rt]);
fun((rt<<1)+1,mid+1,r,lazy[rt]);
lazy[rt]=0;
}
void update(ll rt,ll l,ll r,ll rl,ll rr,ll k){
if(r<rl||rr<l) return;
if(l>=rl&&rr>=r){fun(rt,l,r,k);return;}
pushdown(rt,l,r);
ll mid=l+r>>1;
update(rt<<1,l,mid,rl,rr,k);
update((rt<<1)+1,mid+1,r,rl,rr,k);
t[rt]=t[rt<<1]+t[(rt<<1)+1];
}
ll query(ll rt,ll l,ll r,ll rl,ll rr){
if(r<rl||rr<l) return 0;
if(l>=rl&&rr>=r) return t[rt];
pushdown(rt,l,r);
ll mid=l+r>>1;
return query(rt<<1,l,mid,rl,rr)+query((rt<<1)+1,mid+1,r,rl,rr);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
build(1,1,n);
}
2. 树状数组(青春版)
树状数组(青春版)
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define lowbit(x) (x)&(-(x))
const ll N=5e5+10;
ll n,m,l,x,y,s[N],a;
void xg(ll x,ll k){
for(int i=x;i<=n;i+=lowbit(i)) s[i]+=k;
}
ll sum(ll x){
ll ct=0;
for(int i=x;i;i-=lowbit(i)) ct+=s[i];
return ct;
}
ll getsum(ll l,ll r){
return sum(r)-sum(l-1);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a,xg(i,a);
while(m--){
cin>>l>>x>>y;
if(l==1){
xg(x,y);
}else{
cout<<getsum(x,y)<<"\n";
}
}
return 0;
}
3. 树状数组
树状数组
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define lowbit(x) ((x)&(-(x)))
const ll N=5e5+10;
ll n,m,l,x,y,k,s[N],s2[N],c[N],a[N];
void xg(ll s[],ll x,ll k){
for(int i=x;i<=n;i+=lowbit(i)) s[i]+=k;
}
void qxg(ll x,ll y,ll k){
xg(s,x,k);
xg(s,y+1,-k);
xg(s2,x,x*k);
xg(s2,y+1,-(y+1)*k);
}
ll sum(ll s[],ll x){
ll ct=0;
for(int i=x;i;i-=lowbit(i)) ct+=s[i];
return ct;
}
ll getsum(ll l,ll r){
return (r+1)*sum(s,r)-sum(s2,r)-l*sum(s,l-1)+sum(s2,l-1);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
c[i]=a[i]-a[i-1];
s[i]+=c[i];
s2[i]+=i*c[i];
if(i+lowbit(i)<=n) s[i+lowbit(i)]+=s[i],s2[i+lowbit(i)]+=s2[i];
}
while(m--){
cin>>l>>x;
if(l==1){
cin>>y>>k;
qxg(x,y,k);
}else{
cout<<getsum(x,x)<<"\n";
}
}
return 0;
}
图论
1. dijkstra
dijkstra
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1e5+10,M=2e5+10,inf=(1ll<<31)-1;
ll n,m,s,dist[N],x,y,v;
vector<pair<ll,ll> > e[M];
set<pair<ll,ll> > q;
void dijkstra(ll s){
q.clear();
for(int i=1;i<=n;i++) dist[i]=inf;
dist[s]=0;
for(int i=1;i<=n;i++) q.insert({dist[i],i});
while(!q.empty()){
ll x=q.begin()->second;
q.erase(q.begin());
if(dist[x]==inf) break;
for(auto y:e[x]){
if(dist[x]+y.second<dist[y.first]){
q.erase({dist[y.first],y.first});
dist[y.first]=dist[x]+y.second;
q.insert({dist[y.first],y.first});
}
}
}
for(int i=1;i<=n;i++)
cout<<dist[i]<<" ";
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n>>m>>s;
for(int i=1;i<=m;i++){
cin>>x>>y>>v;
e[x].push_back({y,v});
}
dijkstra(s);
return 0;
}
2. lca
lca
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=5e5+10;
ll n,a,b,s,m,l,ans,tot,f[N][55],h[N],de[N],r;
struct P{
ll a,n;
}d[N*2];
void dfs(ll now,ll fa){
f[now][0]=fa,de[now]=de[fa]+1;
for(int i=1;i<=20;i++)
f[now][i]=f[f[now][i-1]][i-1];
for(int i=h[now];i!=0;i=d[i].n)
if(d[i].a!=fa)
dfs(d[i].a,now);
}
ll lca(ll x,ll y){
if(de[x]>de[y]) x^=y^=x^=y;
for(int i=20;i>=0;i--)
if(de[f[y][i]]>=de[x])
y=f[y][i];
if(x==y) return x;
for(int i=20;i>=0;i--)
if(f[x][i]!=f[y][i])
x=f[x][i],y=f[y][i];
return f[x][0];
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n>>m>>s;
for(int i=1;i<n;i++){
cin>>a>>b;
d[++tot].a=b,d[tot].n=h[a],h[a]=tot;
d[++tot].a=a,d[tot].n=h[b],h[b]=tot;
}
dfs(s,0);
while(m--){
cin>>l>>r;
cout<<lca(l,r)<<"\n";
}
return 0;
}
C++常用模板的更多相关文章
- NDK(10)Android.mk各属性简介,Android.mk 常用模板
参考 : http://blog.csdn.net/hudashi/article/details/7059006 本文内容: Android.mk简介, 各属性表, 常用Android.mk模板 1 ...
- IDEA学习——模板及其常用模板
模板及其常用模板 (1)psvm (2)sout sout / soutp / soutv / 变量.sout (3)fori iter增强for循环 itar普通for循环 (4)list.for ...
- Vue常用模板语法
常用模板语法 本篇将在上一篇的基础上记录文本渲染.表达式.过滤器以及常用指令的简单用法. 一.文本渲染 Vue支持动态渲染文本,即在修改属性的同时,实时渲染文本内容.同时为了提高渲染效率,也支持只 ...
- html5常用模板下载网站
html5常用模板下载网站 开创者素材.站长素材.模板之家 推荐葡萄家园素材网,他们网页模板栏目有个HTML模板,很多静态源码.应该是你所需要的. html静态页面模板 还是服饰素材啊 朋友 设计云 ...
- NDK(10)Android.mk各属性简介,Android.mk 常用模板--未完
参考 : http://blog.csdn.net/hudashi/article/details/7059006 1. Android.mk简介 Android.mk文件是GNU Makefile的 ...
- CodeSmith 简单使用和常用模板
1.简介 CodeSmith 是一种基于模板的代码生成工具,它使用类似于 ASP.NET的语法来生成任意类型的代码或文本. 2.软件布局 整体布局和visual studio系列相似,用过VS开发对此 ...
- WordPress主题模板层次和常用模板函数
首页: home.php index.php 文章页: single-{post_type}.php – 如果文章类型是videos(即视频),WordPress就会去查找single-videos. ...
- hdu1251+字典树常用模板
这里只简单给出几个常用的字典树的模板,要看具体介绍的请看:传送门 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现) ...
- spring boot ----> 常用模板freemarker和thymeleaf
===========================freemarker=================================== freemarker 官网:https://freem ...
- WDA基础十三:常用模板管理
常用的模板一般是SMW0和OAOR,根据不同需求来的. WAD有个不好的地方就是不支持GUI上的OLE和DOI,所以需要做转换,下面是常用的方式: FUNCTION ZCRM_DOWNLOAD_TEM ...
随机推荐
- 当 Knative 遇见 WebAssembly
简介: Knative 可以支持各种容器化的运行时环境,我们今天来探索一下利用 WebAssembly 技术作为一个新的 Serverless 运行时. 作者:易立 Knative 是在 Kubern ...
- 容器环境自建数据库、中间件一键接入阿里云 Prometheus 监控
------------恢复内容开始------------ 阿里云Prometheus服务4月9日发布重大升级,支持容器环境下一键接入MySQL.Redis.MangoDB.ElasticSearc ...
- Serverless 场景排查问题利器 : 函数实例命令行操作
简介:实例命令行功能的推出希望能消除用户使用 Serverless 的"最后一公里",直接将真实的函数运行环境展现给用户. 背景介绍 全托管的 Serverless 计算平台能给 ...
- 实时数仓入门训练营:基于 Apache Flink + Hologres 的实时推荐系统架构解析
简介: <实时数仓入门训练营>由阿里云研究员王峰.阿里云资深技术专家金晓军.阿里云高级产品专家刘一鸣等实时计算 Flink 版和 Hologres 的多名技术/产品一线专家齐上阵,合力 ...
- 如何避免JS内存泄漏?
简介: 很多开发者可能平时并不关心自己维护的页面是否存在内存泄漏,原因可能是刚开始简单的页面内存泄漏的速度很缓慢,在造成严重卡顿之前可能就被用户刷新了,问题也就被隐藏了,但是随着页面越来越复杂,尤 ...
- CSS3 transition动画、transform变换、animation动画
一.CSS3 transition动画 transition可以实现动态效果,实际上是一定时间之内,一组css属性变换到另一组属性的动画展示过程. 属性参数: 1.transition-propert ...
- TheWay2Hack
coding 阶段一 打基础. CS61A:现在进度落后一个月,递归部分让我焦头烂额.所以将完成时间延后了一个月,截止到6月7号搞完. CSAPP:卡在datalab,按照3月18号开始,预计7月1号 ...
- 2019-7-3-Roslyn-理解-msbuild-的清理过程
title author date CreateTime categories Roslyn 理解 msbuild 的清理过程 lindexi 2019-07-03 18:21:25 +0800 20 ...
- C语言程序设计-笔记2-分支结构
C语言程序设计-笔记2-分支结构 例3-1 简单的猜数游戏.输入你所猜的整数(假定1-100),与计算机产生的被猜数比较,若相等,显示猜中:若不等,显示与被猜数的大小关系. /*简单的猜数游戏*/ ...
- C++多态与虚拟:Objects 实例化(Objects Instantiation)探究
一.Objects的创建 依据已有的class CPoint ,我们可以产生一个或多个object(对象),或者说是产生一个instance(实体): CPoint aPoint(7.2); // a ...