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 ...
随机推荐
- 千万级可观测数据采集器--iLogtail代码完整开源
简介: 2022年6月29日,阿里云iLogtail开源后迎来首次重大更新,正式发布完整功能的iLogtail社区版.本次更新开源全部C++核心代码,该版本在内核能力上首次对齐企业版,开发者可以构建出 ...
- 行业实战 | 5G+边缘计算+“自由视角” 让体育赛事更畅快
简介: 世界本是多维的.进入5G时代,观众对多维度视觉体验的需求日益增长,5G MEC网络与边缘计算的结合,具备大带宽.低延迟特性,使视频多维视觉呈现成为现实.在第二十三届CUBA中国大学生篮球联赛期 ...
- 函数计算 GB 镜像秒级启动:下一代软硬件架构协同优化揭秘
简介:本文将介绍借助函数计算下一代 IaaS 底座神龙裸金属和安全容器,进一步降低绝对延迟且能够大幅降低冷启动频率. 作者:修踪 背景 函数计算在 2020 年 8 月创新地提供了容器镜像的函数部署 ...
- [GPT] gradio-chatbot 原理及代码解析
GradioChatBot 是一个基于 Gradio 的聊天机器人,它可以与不同的 URL 进行对话.其原理是通过将用户输入的文本发送到指定的 URL,然后接收并解析 URL 返回的响应,然后将响 ...
- [FAQ] 在 Mac 系统上 yarn add canvas 安装失败的原因
当使用 yarn add 安装某个 node 库时,如果出现失败,多半是由于 nodejs 版本问题引起的. 现在我们可以使用 nvm 方便的管理不同的 nodejs 进行随时切换. $ nvm ...
- dotnet OpenXML 解析 PPT 里表格的样式
在 PPT 里面的表格可以通过表格样式配置决定表格的样式,本文将和大家介绍如何获取和解析表格的样式 本文属于 OpenXML 系列博客,有一定的上下文,详细请参阅 Office 使用 OpenXML ...
- vue引入一个单独的数据文件
1.新建一个address.js的文件 2.文件内const citys = { "北京市": ["东城区","西城区",& ...
- Failed to download metadata for repo ‘PowerTools‘: Cannot prepare internal mirrorlist: No URLs in mi
Failed to download metadata for repo 'AppStream' [CentOS] - Techglimpsehttps://techglimpse.com/faile ...
- leaflet 河流颜色渐变效果
1.Leaflet-polycolor github地址:https://github.com/Oliv/leaflet-polycolor 插件缺陷:需要把每个折点的颜色都指定才行,一般做不到 2. ...
- 【iOS逆向与安全】iOS远程大师:通过H5后台远程查看和协助iPhone设备
前言 在移动设备测试和远程协助的过程中,能够远程查看和协助iPhone设备是一项非常实用的功能.为了解决这一需求,我开发了一款名为iOS远程大师的产品,允许用户通过H5后台界面查看和协助越狱或非越狱的 ...