c++复习板子
数论
GCD
点击查看
B4025 最大公约数
gcd:
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b;
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
else ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x*10+ch-48);
ch=getchar();
}
return x*f;
}
int gcd(int a,int b) {
if(!b) return a;
return gcd(b,a%b);
}
signed main(){
a=read(),b=read();
cout<<gcd(a,b);
}
P2613 【模板】有理数取余
exgcd:
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=19260817;
int a,b;
int pow(int a,int b){
int res=1;
while(b){
if(b&1){
res=res*a%mod;
}
a=a*a%mod;
b>>=1;
}
return res;
}
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
else ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x*10+ch-48)%mod;
ch=getchar();
}
return x*f%mod;
}
signed main(){
a=read(),b=read();
if(!b){
cout<<"Angry!";
return 0;
}
cout<<a*pow(b,mod-2)%mod;
}
筛法
点击查看
P3383 【模板】线性筛素数
欧拉筛:
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,q,tot;
int prime[7000003]; //判断质数
bool vis[100000004];
void Prime_shai(int up){
memset(vis,1,sizeof vis);
vis[1]=0;
for(int i=2;i<=n;i++){
if(vis[i]){
prime[++tot]=i; //没有被筛就是质数
}
for(int j=1;prime[j]*i<=n&&j<=tot;j++){
vis[i*prime[j]]=0; //被筛到打个标记
if(!i%prime[j]) break; //如果prime[j]是i的因子,那么以后得最小质因数就不在是prime[x]而是prime[j]
}
}
}
int a;
signed main(){
cin>>n>>q;
Prime_shai(n);
while(q--){
cin>>a;
cout<<prime[a]<<"\n";
}
}
图论
最短路
点击查看
P3371 【模板】单源最短路径(弱化版)
SPFA :
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,u,v,w,s;
struct node{
int to,nxt,w;
}z[10000040]; //链式前向星
int cnt;
int h[1000004];
int dis[1000004];
int vis[1000004];
void add(int x,int y,int w){
z[++cnt].to=y;
z[cnt].nxt=h[x];
z[cnt].w=w;
h[x]=cnt;
}
void SPFA(int start){
for(int i=1;i<=n;i++) dis[i]=1e11,vis[i]=0;
vis[start]=1;
queue<int> p;
dis[start]=0;
p.push(start);
while(!p.empty()){
int x=p.front();
p.pop();
vis[x]=0;
for(int i=h[x];i;i=z[i].nxt){
int y=z[i].to;
if(dis[y]>dis[x]+z[i].w){
dis[y]=z[i].w+dis[x];
if(!vis[y]){
vis[y]=1;
p.push(y);
}
}
}
}
}
signed main(){
cin>>n>>m>>s;
for(int i=1;i<=m;i++){
scanf("%lld%lld%lld",&u,&v,&w);
add(u,v,w);
}
SPFA(s);
for(int i=1;i<=n;i++){
if(dis[i]!=1e11) cout<<dis[i]<<" ";
else cout<<"2147483647 ";
}
}
P4779 【模板】单源最短路径(标准版)
迪杰斯特拉:
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
typedef pair<int,int> pii;
int n,m,u,v,w,s;
struct node{
int to,nxt,w;
}z[10000040]; //链式前向星
int cnt;
int h[1000004];
int dis[1000004];
int vis[1000004];
void add(int x,int y,int w){
z[++cnt].to=y;
z[cnt].nxt=h[x];
z[cnt].w=w;
h[x]=cnt;
}
void dijie(int start){
for(int i=1;i<=n;i++) dis[i]=1e11,vis[i]=0;
dis[start]=1;
priority_queue<pii,vector<pii>,greater<pii> > p;
p.push(make_pair(0,start));
while(!p.empty()){
int x=p.top().second;
p.pop();
if(vis[x]) continue;
else{
vis[x]=1;
for(int i=h[x];i;i=z[i].nxt){
int y=z[i].to;
if(dis[y]>dis[x]+z[i].w){
dis[y]=dis[x]+z[i].w;
p.push(make_pair(dis[y],y));
}
}
}
}
}
signed main(){
cin>>n>>m>>s;
for(int i=1;i<=m;i++){
scanf("%lld%lld%lld",&u,&v,&w);
add(u,v,w);
}
dijie(s);
for(int i=1;i<=n;i++){
cout<<dis[i]<<" ";
}
}
B3647 【模板】Floyd
Floyd:
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int a[102][102];
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
a[i][j]=0x3f3f3f3f;
a[j][i]=0x3f3f3f3f;
}
}
for(int i=1;i<=m;i++){
int a1,b,c;
cin>>a1>>b>>c;
if(a[a1][b]>c){
a[a1][b]=c;
a[b][a1]=c;
} }
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][k]+a[k][j]<a[i][j]){
a[i][j]=a[i][k]+a[k][j];
a[j][i]=a[i][k]+a[k][j];
}
if(i==j){
a[i][j]=a[j][i]=0;
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
P1144 最短路计数
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int Mod=100003;
typedef pair<int,int> pii;
int cnt,n,m,x,y;
map<int,int> mp[2000040];
int h[3000004];
struct node{
int to,nxt;
}z[4000004];
void add(int x,int y){
z[++cnt].to=y;
z[cnt].nxt=h[x];
h[x]=cnt;
}
int ans[3000003];
int dis[3000004];
int vis[3000004];
void dijie(int start){
priority_queue<pii,vector<pii>,greater<pii> > p;
for(int i=1;i<=n;i++) dis[i]=1e11,vis[i]=0;
dis[start]=0;
ans[start]=1;
p.push({0,start});
while(!p.empty()){
int x=p.top().second;
p.pop();
if(vis[x]) continue;
else{
vis[x]=1;
for(int i=h[x];i;i=z[i].nxt){
int y=z[i].to;
if(dis[y]>dis[x]+1){
dis[y]=dis[x]+1;
ans[y]=ans[x];
p.push({dis[y],y});
}
else if(dis[y]==dis[x]+1){
ans[y]+=ans[x];
ans[y]%=Mod;
}
}
}
}
}
signed main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>x>>y;
if(x==y) continue;
else{
// if(mp[x].count(y)) continue; //判重边
add(x,y);
add(y,x);
mp[x][y]=1;
mp[y][x]=1;
}
}
dijie(1);
for(int i=1;i<=n;i++){
cout<<ans[i]<<"\n";
}
}
P5960 【模板】差分约束
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
struct node{
int to,nxt,w;
}z[1000004];
int cnt;
int h[1000004];
void add(int x,int y,int w){
z[++cnt].to=y;
z[cnt].w=w;
z[cnt].nxt=h[x];
h[x]=cnt;
}
int dis[1000004];
int vis[1000004];
int tot[1000004];
bool SPFA(int s){
memset(dis,0x3f3f3f,sizeof(dis));
vis[s]=1;
dis[s]=0;
queue<int> p;
p.push(s);
while(!p.empty()){
int x=p.front();
p.pop();
vis[x]=0;
for(int i=h[x];i;i=z[i].nxt){
int y=z[i].to;
if(dis[y]>dis[x]+z[i].w){
dis[y]=dis[x]+z[i].w;
if(!vis[y]){
tot[y]++;
vis[y]=1;
if(tot[y]==n+1) return false;
p.push(y);
}
}
}
}
return true;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int a,b,c;
scanf("%lld%lld%lld",&a,&b,&c);
add(b,a,c);
}
for(int i=1;i<=n;i++) add(0,i,0);
if(SPFA(0)){
for(int i=1;i<=n;i++){
cout<<dis[i]<<" ";
}
}
else{
cout<<"NO";
}
}
树论
树的直径
点击查看
B4016 树的直径
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n,a,b;
struct node{
int to,nxt;
}z[1000004];
int cnt;
int h[1000040];
void add(int x,int y){
z[++cnt].to=y;
z[cnt].nxt=h[x];
h[x]=cnt;
}
int id,maxx;
int dis[2000004];
void dfs(int x,int fa){
if(dis[x]>maxx){
maxx=dis[x];
id=x;
}
for(int i=h[x];i;i=z[i].nxt){
int y=z[i].to;
if(y==fa) continue;
else{
dis[y]=dis[x]+1;
dfs(y,x);
}
}
}
int main(){
cin>>n;
for(int i=1;i<n;i++){
cin>>a>>b;
add(a,b);
add(b,a);
}
dfs(1,0);
memset(dis,0,sizeof dis);
maxx=0;
dfs(id,0);
cout<<maxx;
}
c++复习板子的更多相关文章
- day-7
/* 倒数7天了 某一天 某一刻 某次呼吸 我们终将再分离 而我的 自传里 曾经有你 没有遗憾的诗句 诗句里 充满感激 (小仙女博客抄来的233) 是啊 就快要结束了 曲终人散 上午被错误数据卡了一小 ...
- ZJOI2019一轮停课刷题记录
Preface 菜鸡HL终于狗来了他的省选停课,这次的时间很长,暂定停到一试结束,不过有机会二试的话还是可以搞到4月了 这段时间的学习就变得量大而且杂了,一般以刷薄弱的知识点和补一些新的奇怪技巧为主. ...
- HAOI(十二省联考)2019 qwq记
\(\large{Day\ -1}:\) 放假了,白天大概是抱着最后一次在机房的心态复习着板子过去的.看着机房里的各位神仙丝毫不慌的颓倒是有点慌了,敲了一下多项式的板子感觉写的相当自闭,感觉AFO应该 ...
- maomao的每日动向
\(2019.02.04\) \(Nothing\) \(to\) \(do\). \(2019.02.05\) - 早上睡到\(12\)点 - 中午下午:吃饭串门拜年 - 晚上:吹爆<流浪地球 ...
- BZOJ 3992 【SDOI2015】 序列统计
题目链接:序列统计 我来复习板子了……这道题也是我写的第一发求原根啊? 求原根方法: 从小到大依次枚举原根.设当前枚举的原根为\(x\),模数为\(p\),\(p-1\)的质因数分别为\(p_1,p_ ...
- NOIP2018游记(更新完毕)
10.13 初赛 Day -1 考前 这一次的考场从暗♂德华兴改到了长沙市一中,一进去:我一看,考场在哪???这一中比长郡大了好多,而且连指示牌都没有,这时碰见了谢总,谢总告诉我们在第二教学楼.路上还 ...
- 堆模板(pascal)洛谷P3378
题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: ...
- CTSC游记
CTSC游记 day 0 到达帝都. 复习板子 day 1 第一题傻逼题啊 第二题第三题写个暴力 好了120稳了 出来一看第一题基数排序炸了? 51+10+10崩盘 day 2 答辩有意思啊 王选怎么 ...
- noip2018——题解&总结
近期正在疯狂复习某些东西,这篇博客尽量年底更完……(Day2T2除外) 好了,所有的希望都破灭了,原来这就是出题人的素质.——一个被欺骗的可怜 $OIer$ 人生中倒数第三次 $noip$ (Mayb ...
- THUSC2019 退役记
Day -inf 这一个半月潜心搞文化课,把文化课的坑填上了不少,我文化课的底子真是薄啊 一年前没想过我还挺有希望进队的,最后还差点冲上 一年后说不定会发现我搞文化课也能搞得不错呢? 一切都是未知 t ...
随机推荐
- 使用 kubeadm 创建高可用 Kubernetes 及外部 etcd 集群
博客链接:使用 kubeadm 创建高可用 Kubernetes 及外部 etcd 集群 前言 Kubernetes 的官方中文文档内容全面,表达清晰,有大量示例和解析 无论任何情况下都推荐先花几个小 ...
- minecraft mods descrip
1. [Advanced Finders]矿物探测器 mod 显示玩家周围附近矿石的方向(指针显示水平面上可到达的矿石) 探测地下深部矿脉(箭头显示最近矿脉的方向(上/下)) 发现大型矿床时发出信号( ...
- C/C++显示类型转换的位拓展方式
最近用verilator写模块的tb,在这里卡了好久(测半天都是C++写的问题) 要点 变量从小位宽到大位宽显示类型转换(explicit cast)时的位拓展方式,取决于转换前变量的符号性. 倘若转 ...
- LayerSkip: 使用自推测解码加速大模型推理
自推测解码是一种新颖的文本生成方法,它结合了推测解码 (Speculative Decoding) 的优势和大语言模型 (LLM) 的提前退出 (Early Exit) 机制.该方法出自论文 Laye ...
- Windows 终端远程连接 Ubuntu
博客地址:https://www.cnblogs.com/zylyehuo/ 查看 ip 的方式参考以下链接 Ubuntu 下查看 ip - zylyehuo - 博客园 在 windows 终端中执 ...
- exim4
exim4 一台 debian 机器日常执行 apt update 后发现需要更新如下软件包, 之前没见过, 特此记录下. root@idebian:~# apt list --upgradable ...
- 附042.Kubernetes_v1.32.3生成环境高可用部署
目录 部署组件 kubeadm介绍 kubelet介绍 kubectl介绍 方案概述 方案介绍 部署规划 节点规划 主机名配置 变量准备 互信配置 环境预配置 部署高可用组件 HAProxy安装 Ke ...
- Cursor预测程序员行业倒计时:CTO应做好50%裁员计划
提供AI咨询+AI项目陪跑服务,有需要回复1 前两天跟几个业内同学做了一次比较深入的探讨,时间从15.00到21.00,足足6个小时! 其中有个问题特别有意思:从ChatGPT诞生到DeepSeek爆 ...
- Javascript+webdriverio实现app自动化demo
1.新建工程和安装库 使用WebStorm新建一个空项目然后在编辑器打开终端输入如下命令: npm init -y npm install webdriverio npm install sleep ...
- JavaScript 单线程原理与异步编程机制
JavaScript 单线程原理与异步编程机制 为什么 JavaScript 是单线程? JavaScript 被设计成单线程,简单来说就是 -- 浏览器里干活儿只能一个接一个排着队来,没法同时多开窗 ...