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 ...
随机推荐
- oracle表名、字段名等对象的命名长度限制(报错:ORA-00972: 标识符过长)
oracle表名.字段名等对象的命名长度限制(报错:ORA-00972: 标识符过长) 简单来说,出现了ORA-00972: 标识符过长的错误 找来找去发现是自己的中间表名太长导致的 Oracle数据 ...
- HL7消息结构
HL7消息用于在不同的医疗保健系统之间传输电子数据,每个消息发送相关特定事件(例如患者入院)的信息.HL7消息采用人类可读格式,本节介绍HL7消息的内容以及HL7消息的组织方式. HL7消息由一个或多 ...
- 力扣1082(MySQL)-销售分析Ⅰ(简单)
题目: 产品表:Product 销售表:Sales 编写一个 SQL 查询,查询总销售额最高的销售者,如果有并列的,就都展示出来. 以 任意顺序 返回结果表. 查询结果格式如下所示. Product ...
- BizWorks助力企业应用的高效开发与复用
简介: BizWorks作为企业级云原生应用数字工作台,能很好地支撑企业数字中台建设.云原生应用开发.企业资产运营管理等场景.本文不会全面介绍BizWorks平台的能力,而是着重介绍BizWorks在 ...
- 阿里云发布企业云原生IT成本治理方案:五大能力加速企业 FinOps 进程
简介:阿里云企业云原生 IT 成本治理方案助力企业落地企业 IT 成本治理的理念.工具与流程,让企业在云原生化的过程中可以数字化地实现企业 IT 成本管理与优化,成为 FinOps 领域的践行者与领 ...
- 【ClickHouse 技术系列】- ClickHouse 中的嵌套数据结构
简介:本文翻译自 Altinity 针对 ClickHouse 的系列技术文章.面向联机分析处理(OLAP)的开源分析引擎 ClickHouse,因其优良的查询性能,PB级的数据规模,简单的架构,被 ...
- OceanBase时序数据库CeresDB正式商用 为用户提供安全可靠的数据存储管理服务
简介: OceanBase完成OLAP和OLTP双重能力并行后,向数据管理领域多模方向迈出第一步. 近日,在数据库OceanBase3.0峰会上,OceanBase CEO杨冰宣布首个时序数据库产品C ...
- C语言的指针不能与数组之前的内存进行比较
标准允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针进行比较,但是不允许与指向数组第一个元素之前的那个内存位置的指针进行比较. 案例一 #define DATAMAX 5 int ...
- 006_Orcad创建Hetergeneous分裂元件
006_Orcad创建Hetergeneous分裂元件 以169脚的EMMC为例: 分为两部分,用到的引脚和NC的引脚. 先画一个框,依据引脚功能添加引脚.A部分做好,做B部分.引脚多,可以用pin ...
- 使用 @NoRepositoryBean 简化数据库访问
在 Spring Data JPA 应用程序中管理跨多个存储库接口的数据库访问逻辑可能会变得乏味且容易出错.开发人员经常发现自己为常见查询和方法重复代码,从而导致维护挑战和代码冗余.幸运的是,Spri ...