2023睿抗CAIP-编程技能赛-本科组省赛(c++)
RC-u1 亚运奖牌榜
模拟 AC:
#include<iostream>
using namespace std;
struct nation{int j,y,t;
}a[2];
int main(){int n;cin>>n;for(int i=1;i<=n;i++){int x,y;cin>>x>>y;if(y==1) a[x].j++;if(y==2) a[x].y++;if(y==3) a[x].t++;}cout<<a[0].j<<" "<<a[0].y<<" "<<a[0].t<<endl;cout<<a[1].j<<" "<<a[1].y<<" "<<a[1].t<<endl;if(a[0].j==a[1].j){if(a[0].y==a[1].y){if(a[0].t>a[1].t) puts("The first win!");else puts("The second win!");return 0;}if(a[0].y>a[1].y) puts("The first win!");else puts("The second win!");return 0;}if(a[0].j>a[1].j) puts("The first win!");else puts("The second win!");return 0;
}
RC-u2 出院
答案错误 未AC(13/15): STL map+哈希思想
#include<iostream>
#include<cstring>
#include<map>
using namespace std;
map<string,string>mapp;
int n,m;
int main(){cin>>n>>m;for(int i=0;i<n;i++){string a,b;cin>>a>>b;mapp[a]=b;}while(m--){string in;cin>>in;int lenn=in.size();if(mapp.count(in)) cout<<mapp[in]<<endl;else{int flag=0;string out;for(auto x:mapp){int len=x.first.size();if(len<=lenn&&in.substr(0,len)==x.first&&mapp.count(in.substr(len,lenn))){flag=1;out=x.second+mapp[in.substr(len,lenn)];break;}}if(flag==1) cout<<out<<endl;else cout<<"D"<<endl;}}return 0;
}
借此题型,复习一下c++中的 STL 和 哈希思想:
洛谷 P4305 [JLOI2011] 不重复数字(set+vector)
set 有序不重复集合
set.insert(x) 插入元素x
set.count(x) 查找元素x,存在为1,不存在为0
set.clear() 清空集合
vector 容器
vector.push_back(x) 向容器的末尾添加一个元素x
vector.pop_back() 移除容器中的最后一个元素
vector.clear() 清空容器
#include<iostream>
#include<vector>
#include<set>
using namespace std;
vector<int>ans;
set<int>s;
int T,n;
int main(){ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);cin>>T;while(T--){cin>>n;s.clear();ans.clear();for(int i=0;i<n;i++){int x;cin>>x;if(s.count(x)==0){s.insert(x);ans.push_back(x);}}for(int x:ans) cout<<x<<" ";cout<<endl;}return 0;
}
ACwing 3466. 清点代码库(map+vector)
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
map<vector<int>,int>mapp;
int main(){ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int n,m;cin>>n>>m;for(int i=1;i<=n;i++){vector<int>num;for(int j=1;j<=m;j++){int x;cin>>x;num.push_back(x);}mapp[num]++;}cout<<mapp.size()<<endl;vector<pair<int,vector<int>>>ans;for(auto p:mapp){ans.push_back({-p.second,p.first});}sort(ans.begin(),ans.end());for(auto x:ans){cout<<x.first*(-1)<<" ";for(auto y:x.second) cout<<y<<" ";cout<<endl;}return 0;
}
ACwing 138. 兔子与兔子(字符串哈希)
#include<iostream>
#include<cstring>
using namespace std;
const int px=131,N=1e6+5;
unsigned long long h[N],p[N];
char s[N];
int n;
unsigned long long get_vlaue(int l,int r){return h[r]-h[l-1]*p[r-l+1];
}
int main(){scanf("%s",s+1);p[0]=1;int len=strlen(s+1);for(int i=1;i<=len;i++){h[i]=h[i-1]*px+s[i]-'a'+1;p[i]=p[i-1]*px;}scanf("%d",&n);while(n--){int l1,r1,l2,r2;scanf("%d %d %d %d",&l1,&r1,&l2,&r2);if(get_vlaue(l1,r1)==get_vlaue(l2,r2)) puts("Yes");else puts("No");}return 0;
}
ACwing 4951. 整理账本(map+vector)
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
map<int,int>mapB;
map<int,int>mapS;
typedef pair<int,int> pii;
vector<pii>ansB;
vector<pii>ansS;
int n,m;
int main(){cin>>n>>m;for(int i=0;i<n;i++){char a;int b,c;cin>>a>>b>>c;if(a=='B'){if(mapB.count(b)) {mapB[b]+=c;continue;}mapB[b]=c;}else{if(mapS.count(b)) {mapS[b]+=c;continue;}mapS[b]=c;}}for(auto x:mapB) ansB.push_back({x.first,x.second});for(auto x:mapS) ansS.push_back({x.first,x.second});sort(ansS.begin(),ansS.end());int lenS=mapS.size();for(int i=min(lenS-1,m-1);i>=0;i--) cout<<"S "<<ansS[i].first<<" "<<ansS[i].second<<endl;sort(ansB.begin(),ansB.end());int lenB=mapB.size();for(int i=lenB-1;i>=max(0,lenB-m);i--) cout<<"B "<<ansB[i].first<<" "<<ansB[i].second<<endl;return 0;
}
RC-u3 骰子游戏
- 如果有5个相同的数字(五个同点数),输出
0 0 1
,表示不需要重骰。 - 如果有4个相同的数字(四个同点数),输出
1 1 6
,表示重骰1个骰子,概率为1/6。 - 如果有3个相同的数字且有两个相同的数字(葫芦),输出
2 11 36
,表示重骰2个骰子,概率为11/36。 - 如果骰子结果为2到6的顺子(六高顺子),输出
4 19 324
,表示重骰4个骰子,概率为19/324。 - 如果骰子结果为1到5的顺子(五高顺子),输出
1 1 6
,表示重骰1个骰子,概率为1/6。 - 如果有3个相同的数字(三个同点数),输出
2 4 9
,表示重骰2个骰子,概率为4/9。 - 如果有两个对子(两对),输出
3 4 9
,表示重骰3个骰子,概率为4/9。 - 如果有一个对子(一对),输出
3 13 18
,表示重骰3个骰子,概率为13/18。 - 其他情况,输出
2 17 18
,表示重骰2个骰子,概率为17/18。
手算+模拟 AC:
#include<iostream>
#include<cstring>
using namespace std;
int n,t,a[10],cnt[10],flag[10];
//a[10] 存储骰子的结果
//cnt[10] 计数每个数字出现的次数
//flag[10]计数出现特定次数的数字的数量
int main(){cin>>n;for(int i=1;i<=n;i++){memset(cnt,0,sizeof cnt);memset(flag,0,sizeof flag);for(int j=1;j<=5;j++){cin>>t;cnt[t]++;}for(int j=1;j<=6;j++)flag[cnt[j]]++;if(flag[5]==1) cout<<0<<" "<<0<<" "<<1;else if(flag[4]==1) cout<<1<<" "<<1<<" "<<6;else if(flag[3]==1&&flag[2]==1) cout<<2<<" "<<11<<" "<<36;else if(flag[1]==5&&cnt[1]==0) cout<<4<<" "<<19<<" "<<324;else if(flag[1]==5&&cnt[6]==0) cout<<1<<" "<<1<<" "<<6;else if(flag[3]==1&&flag[1]==2) cout<<2<<" "<<4<<" "<<9;else if(flag[2]==2) cout<<3<<" "<<4<<" "<<9;else if(flag[2]==1&&flag[1]==3) cout<<3<<" "<<13<<" "<<18;else cout<<2<<" "<<17<<" "<<18;cout<<endl;}return 0;
}
RC-u4 相对论大师
答案错误 未AC (23/25): STL+BFS
一个有向图, 每两个顶点为一组,要求找到所有同一组内的顶点路径中的最短路径
//RCu4 23
#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
#include<map>
using namespace std;
const int N=2e3+5;
map<pair<string,int>,int>mapsii;
map<int,pair<string,int>>mapisi;
vector<int>path;
int n,id,G[N][N],ans=(int)1e9,flag[N],pre[N];
int bfs(int start,int end){memset(flag,0,sizeof(flag));memset(pre,0,sizeof(pre));queue<pair<int,int>>q;q.push({start,0});flag[start]=1;while(q.size()){auto t=q.front();int point=t.first;int step=t.second;if(point==end){if(step<ans){ans=step;return 1;}return -1;}q.pop();for(int i=0;i<id;i++){if(G[point][i]==1&&flag[i]==0){step++;q.push({i,step});pre[i]=point;flag[i]=1;}}}return -1;
}
int main(){ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);cin>>n;id=0;for(int i=0;i<n;i++){string a,c;int b,d;cin>>a>>b>>c>>d;int x,y;if(mapsii.count({a,b})==0){x=id++;mapsii[{a,b}]=x;}else x=mapsii[{a,b}];if(mapsii.count({c,d})==0){y=id++;mapsii[{c,d}]=y;}else y=mapsii[{c,d}];G[x][y]=1;}for(auto t:mapsii){string a=t.first.first;int b=t.first.second;int start=t.second;mapisi.insert({start,{a,b}});if(mapsii.count({a,b==0?1:0})==0) continue;int end=mapsii[{a,b==0?1:0}];if(bfs(start,end)==1){path.clear();for(int i=end;i!=start;i=pre[i]) path.push_back(i);path.push_back(start);}}for(int i=path.size()-1;i>=1;i--){int t1=path[i];int t2=path[i-1];cout<<mapisi.find(t1)->second.first<<" "<<mapisi.find(t1)->second.second<<" ";cout<<mapisi.find(t2)->second.first<<" "<<mapisi.find(t2)->second.second<<" ";}cout<<"="<<" ";cout<<mapisi.find(path[path.size()-1])->second.first<<" "<<mapisi.find(path[path.size()-1])->second.second<<" ";cout<<mapisi.find(path[0])->second.first<<" "<<mapisi.find(path[0])->second.second;cout<<endl;return 0;
}
ACwing 847. 图中点的层次
#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int N=1e5+5;
int n,m;
vector<int>G[N];
bool flag[N];
int bfs(int a,int b){memset(flag,0,sizeof flag);queue<pair<int,int>>q;q.push({a,0});flag[a]=1;while(!q.empty()){auto t=q.front();int point=t.first;int step=t.second;if(point==b) return step;q.pop();for(int i=0;i<G[point].size();i++){int nextpoint=G[point][i];if(flag[nextpoint]==0){flag[nextpoint]=1;q.push({nextpoint,step+1});}}}return -1;
}
int main(){cin>>n>>m;while(m--){int a,b;cin>>a>>b;G[a].push_back(b);}cout<<bfs(1,n)<<endl;return 0;
}
RC-u5 相对成功与相对失败
最后的排序是根据若分数不上升的排列的
令参加比赛得一分,不玩手机游戏得一分
最少有多少人撒谎,就是最多有多少人没有撒谎,即最多有多少人是符合分数不上升排列的
所以本题的本质是:最长不上升子序列长度,即动态规划
因此最终 答案 == n - 下降子序列长度
超时 未AC(17/30): 暴力法求下降子序列
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1e5+5;
int T,n,a[N],b[N],dp[N];
int main(){ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++){int x,y;cin>>x>>y;if(x==1&&y==0) a[i]=2;else if(x==0&&y==1) a[i]=0;else a[i]=1;}for(int i=1;i<=n;i++){int x;cin>>x;b[i]=a[x];dp[i]=1;}for(int i=1;i<=n;i++) for(int j=1;j<i;j++) if(b[j]>=b[i]) dp[i]=max(dp[i],dp[j]+1);sort(dp+1,dp+1+n);cout<<n-dp[n]<<endl;}return 0;
}
优化AC: 单调贪心+二分优化查找
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
const int N=1e5+5;
int T,n,a[N],b[N];
int main(){ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++){int x,y;cin>>x>>y;if(x==1&&y==0) a[i]=2;else if(x==0&&y==1) a[i]=0;else a[i]=1;}for(int i=1;i<=n;i++){int x;cin>>x;b[i]=a[x];}vector<int>stk;stk.push_back(b[1]);for(int i=2;i<=n;i++){if(stk.back()>=b[i]) stk.push_back(b[i]);else{int l=0,r=stk.size()-1;while(l<r){int mid=(l+r)/2;if(stk[mid]>=b[i]) l=mid+1;else r=mid;}stk[l]=b[i];}}cout<<n-stk.size()<<endl;}return 0;
}
ACwing 895. 最长上升子序列
//O(n^2)
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e3+5;
int n,a[N],dp[N];
int main(){cin>>n;for(int i=1;i<=n;i++) cin>>a[i],dp[i]=1;for(int i=1;i<=n;i++)for(int j=1;j<=i-1;j++)if(a[j]<a[i])dp[i]=max(dp[i],dp[j]+1);sort(dp+1,dp+1+n);cout<<dp[n]<<endl;return 0;
}//O(nlongn)
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int N=1e5+5;
int n,a[N];
vector<int>stk;//模拟堆栈
int main(){cin>>n;for(int i=0;i<n;i++) cin>>a[i];stk.push_back(a[0]);for(int i=1;i<n;i++) {//如果该元素大于栈顶元素,将该元素入栈if(a[i]>stk.back()) stk.push_back(a[i]);//否则替换掉第一个>=这个数字的那个数else *lower_bound(stk.begin(),stk.end(),a[i])=a[i];}cout<<stk.size()<<endl;return 0;
}
相关文章:

2023睿抗CAIP-编程技能赛-本科组省赛(c++)
RC-u1 亚运奖牌榜 模拟 AC: #include<iostream> using namespace std; struct nation{int j,y,t; }a[2]; int main(){int n;cin>>n;for(int i1;i<n;i){int x,y;cin>>x>>y;if(y1) a[x].j;if(y2) a[x].y;if(y3) a[x].t;}cout<<a[0].j<<&…...

现在国内的ddos攻击趋势怎么样?想了解现在ddos的情况该去哪看?
目前,国内的DDoS攻击趋势显示出以下几个特征: 攻击频次显著增加:根据《快快网络2024年DDoS攻击趋势白皮书》,2023年DDoS攻击活动有显著攀升,总攻击次数达到1246.61万次,比前一年增长了18.1%。 攻击强度和规…...

微服务到底是个什么东东?
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。 每个服务运行在其独立的进程中,服务和服务间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的…...

C++笔试强训5
文章目录 一、选择题1-5题6-10题 二、编程题题目一题目二 一、选择题 1-5题 x1,先x,再x–,while判断永远为真,故死循环 选D。 sizeof会计算\0,strlen不包括\0,并且strlen只计算\0之前的。 所以sizeof是10,strken是4 …...

初学51单片机之UART串口通信
CSDN其他博主的博文(自用)嵌入式学习笔记9-51单片机UART串口通信_51uart串口通讯-CSDN博客 CSDN其他博主的博文写的蛮好,如果你想了解51单片机UART串口可以点进去看看: UART全称Universal Asynchronous Receiver/Transmitter即通…...

数据结构——查找(线性表的查找与树表的查找)
目录 1.查找 1.查找的基本概念 1.在哪里找? 2.什么查找? 3.查找成功与否? 4.查找的目的是什么? 5.查找表怎么分类? 6.如何评价查找算法? 7.查找的过程中我们要研究什么? 2.线性表…...
MySQL入门学习-深入索引.组合索引
在 MySQL 中,组合索引(也称为复合索引)是在多个列上创建的索引。以下是关于组合索引的详细信息: 一、组合索引的概念: - 组合索引是基于多个列创建的索引结构。它可以提高在这些列上进行查询的效率。 二、深入理解组…...

RABBITMQ的本地测试证书生成脚本
由于小程序要求必须访问wss的接口,因此需要将测试环境也切换到https,看了下官方的文档 RabbitMQ Web STOMP Plugin | RabbitMQ里面有这个信息 然后敲打GPT一阵子,把要求输入几个来回,得到这样一个脚本: generate_cer…...

记录些Redis题集(4)
Redis 通讯协议(RESP) Redis 通讯协议(Redis Serialization Protocol,RESP)是 Redis 服务端与客户端之间进行通信的协议。它是一种二进制安全的文本协议,设计简洁且易于实现。RESP 主要用于支持客户端和服务器之间的请求响应交互…...

JVM:垃圾回收器
文章目录 一、介绍二、年轻代-Serial垃圾回收器三、老年代-SerialOld垃圾回收器四、年轻代-ParNew垃圾回收器五、老年代-CMS(Concurrent Mark Sweep)垃圾回收器六、年轻代-Parllel Scavenge垃圾回收器七、Parallel Old垃圾回收器八、G1垃圾回收器 一、介…...

Golang | Leetcode Golang题解之第228题汇总区间
题目: 题解: func summaryRanges(nums []int) (ans []string) {for i, n : 0, len(nums); i < n; {left : ifor i; i < n && nums[i-1]1 nums[i]; i {}s : strconv.Itoa(nums[left])if left < i-1 {s "->" strconv.It…...

单目3D和bev综述
文章目录 SOTA2D 检测单目3d检测3d bev cam范式1 Transformer attention is all you need 20172 ViT vision transformer ICLR 2021google3 swin transformer 2021 ICCV bestpaper MS4 DETR 20205 DETR3D 20216 PETR 20227 bevformerLSSbevdetcaddn指标 mAP NDS标注:…...

每日Attention学习11——Lightweight Dilated Bottleneck
模块出处 [TITS 23] [link] [code] Lightweight Real-Time Semantic Segmentation Network With Efficient Transformer and CNN 模块名称 Lightweight Dilated Bottleneck (LDB) 模块作用 改进的编码器块 模块结构 模块代码 import torch import torch.nn as nn import to…...

EM32DX-E4 IO 扩展模块
输入:0x6000-01 // 输入 0-15 6020H——00H IN0 计数【0~7】 ——01H IN0_SetCountMode S32 r/w 初始值默认为 0 设置 IN0 的计数方式:0 电平下 降沿,1 电平上升沿, 2 电平任意沿 ——02H IN0_Set…...

【数据结构与算法】选择排序篇----详解直接插入排序和哈希排序【图文讲解】
欢迎来到CILMY23的博客 🏆本篇主题为:【数据结构与算法】选择排序篇----详解直接插入排序和哈希排序 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏:Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux…...

SpringBoot实战:多表联查
1. 保存和更新公寓信息 请求数据的结构 Schema(description "公寓信息") Data public class ApartmentSubmitVo extends ApartmentInfo {Schema(description"公寓配套id")private List<Long> facilityInfoIds;Schema(description"公寓标签i…...

解决mysql,Navicat for MySQL,IntelliJ IDEA之间中文乱码
使用软件版本 jdk-8u171-windows-x64 ideaIU-2021.1.3 mysql-essential-5.0.87-win32 navicat8_mysql_cs 这个问题我调试了好久,网上的方法基本上都试过了,终于是解决了。 三个地方结果都不一样。 方法一 首先大家可以尝试下面这种方法:…...
虚拟环境操作
1、对虚拟环境的操作 查看虚拟环境列表 conda env list 创建虚拟环境 conda create -n 虚拟环境名称 python3.x 激活虚拟环境 conda activate 虚拟环境名称 退出虚拟环境 conda deactivate 删除虚拟环境 conda remove -n 虚拟环境名称 all 2、对虚拟环境下的包的操作…...

企业网三层架构
企业网三层架构:是一种层次化模型设计,旨在将复杂的网络设计分成三个层次,每个层次都着重于某些特定的功能,以提高效率和稳定性。 企业网三层架构层次: 接入层:使终端设备接入到网络中来,提供…...
node.js的安装及学习(node/nvm/npm的区别)
一、什么是node、nvm和npm 1.Node.js node.js 一种Javascript编程语言的运行环境,能够使得javascript能够脱离浏览器运行。以前js只能在浏览器(也就是客户端)上运行,node.js将浏览器中的javascript运行环境进行封装的,…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...

轻量级Docker管理工具Docker Switchboard
简介 什么是 Docker Switchboard ? Docker Switchboard 是一个轻量级的 Web 应用程序,用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器,使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...