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运行环境进行封装的,…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
