天梯赛数据结构合集
1.集合操作:PTA | 程序设计类实验辅助教学平台
主要是注意set的取交集操作,AC代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
set<int> a[60];
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>m;for(int j=1;j<=m;j++){int x;cin>>x;a[i].insert(x);}}cin>>k;for(int i=1;i<=k;i++){int u,v;cin>>u>>v;set<int> ss;set_intersection(a[u].begin(), a[u].end(),a[v].begin(), a[v].end(),inserter(ss,ss.begin()));double cnt=ss.size();printf("%.2lf",cnt/(a[u].size()+a[v].size()-cnt)*100.0);cout<<"%"<<endl;}
}
2.map+vector:PTA | 程序设计类实验辅助教学平台
一开始以为是一道水题,但是后来发现虽然意思简单,但是实现方式还是蛮有意义的,我们可以开一个map,利用vcetor作为key,再通过for(auto &s:map)即可遍历map,得到答案。AC代码如下:
#include<bits/stdc++.h>
using namespace std;const int N = 10010, M = 110;
map<vector<int>, int> cnt;
vector<pair<int, vector<int> > > ans;
int n, m;int main()
{scanf("%d%d", &n, &m);for (int i = 0; i < n; i++){vector<int> temp;for (int j = 0; j < m; j++){int x;scanf("%d", &x);temp.push_back(x);}cnt[temp]++;}for (auto &u : cnt) ans.push_back({ -u.second, u.first });//for (auto &[u, v] : cnt) ans.push_back({ -v, u });//C++新特性,PTA不支持sort(ans.begin(), ans.end());printf("%d\n", cnt.size());for (auto &u : ans){printf("%d", -u.first);for (auto &v : u.second)printf(" %d", v);puts("");}
3.并查集:PTA | 程序设计类实验辅助教学平台
非常有意思的一道题,只要观察到一点就非常容易了,也就是最短路是2*(节点数-1)-最长链的长度,证明非常容易,只是要想注意到还是需要多画图模拟,知道了这个后那就是常规的dfs预处理+并查集维护了,下面是AC代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,die[200010],dep[200010],fa[200010],siz[200010],hh=0;
vector<int> edge[200010];
int find(int u){if(fa[u]==u) return u;return fa[u]=find(fa[u]);
}
void merge(int u,int v){if(find(u)==find(v)) return;siz[find(v)]+=siz[find(u)];fa[find(u)]=find(v);
}
void dfs(int x,int cnt){dep[x]=cnt;for(int i=0;i<edge[x].size();i++){dfs(edge[x][i],cnt+1);}
}
signed main(){cin>>n>>m;int root=-1;for(int i=1;i<=n;i++){fa[i]=i;siz[i]=1;cin>>die[i];if(die[i]!=-1){edge[die[i]].push_back(i);}if(die[i]==-1) root=i;}dfs(root,0);int ans=0;while(m--){int x;cin>>x;if(find(x)==root){if(m>0) cout<<ans<<endl;else cout<<ans;}else{//找到最近的int pos=x,cnt=0;hh=max(hh,dep[pos]);while(find(pos)!=root){merge(pos,root);pos=die[pos];}ans=2*siz[root]-2-hh;if(m>0) cout<<ans<<endl;else cout<<ans;}}
}
4.线段树:PTA | 程序设计类实验辅助教学平台
PTA目前唯一一道做到的权值线段树,配合上堆模拟即可,下面是AC代码:
#include<bits/stdc++.h>
using namespace std;
struct node{int ln,rn,sum;
}tr[2001000];
stack<int> S;
int n;
void build(int l,int r,int root){tr[root].ln=l;tr[root].rn=r;tr[root].sum=0;if(l==r) return;int mid=(l+r)/2;build(l,mid,root<<1);build(mid+1,r,root<<1|1);
}
int query(int val,int root){int l=tr[root].ln,r=tr[root].rn;int mid =l+r>>1;if(l==r) return l;int ans;if(tr[root<<1].sum>=val) ans=query(val,root<<1);else ans=query(val-tr[root<<1].sum,root<<1|1);return ans;
}
void update(int pos,int val,int root){int l=tr[root].ln;int r=tr[root].rn;if(l==r){tr[root].sum+=val;return;}int mid=l+r>>1;if(pos<=mid) update(pos,val,root<<1);else update(pos,val,root<<1|1);tr[root].sum=tr[root<<1].sum+tr[root<<1|1].sum;
}
int main(){cin>>n;build(1,1e5+10,1);while(n--){string tmp;cin>>tmp;if(tmp=="Push"){int val;scanf("%d",&val);S.push(val);update(val,1,1);}else if(tmp=="PeekMedian"){if(S.size()==0) printf("Invalid\n");else{int k=(S.size()+1)/2;printf("%d\n",query(k,1));}}else if(tmp=="Pop"){if(S.size()==0) printf("Invalid\n");else{int val=S.top();S.pop();printf("%d\n",val);update(val,-1,1);}}}
}
5.并查集:PTA | 程序设计类实验辅助教学平台
我们对每一个爱好开一个vcetor,存有这个爱好的人,然后遍历vector进行合并即可,下面是AC代码:
#include<bits/stdc++.h>
using namespace std;
int fa[200010],n;
int siz[200010];
vector<int> like[1001];
int find(int x){if(x==fa[x]) return x;return find(fa[x]);
}
void merge(int u,int v){if(find(u)==find(v)) return;siz[find(v)]+=siz[find(u)];fa[find(u)]=find(v);
}
int change(string s){int num=0;for(int i=0;i<s.size()-1;i++){num=10*num+s[i]-'0';}return num;
}
int main(){cin>>n;for(int i=1;i<=n;i++) fa[i]=i;for(int i=1;i<=n;i++) siz[i]=1;for(int i=1;i<=n;i++){string s;cin>>s;int k;k=change(s);int w;for(int j=1;j<=k;j++){cin>>w;like[w].push_back(i);}}for(int i=1;i<=1000;i++){for(int j=1;j<like[i].size();j++){merge(like[i][j],like[i][j-1]);}}vector<int> ans;int cnt=0;for(int i=1;i<=n;i++){if(fa[i]==i){cnt++;ans.push_back(siz[i]);}}int www=ans.size();sort(ans.begin(),ans.end());cout<<cnt<<endl;for(int i=ans.size()-1;i>=1;i--) cout<<ans[i]<<" ";cout<<ans[0];
}
6.拓扑排序:PTA | 程序设计类实验辅助教学平台
一道比较好的拓扑排序好题,我们按照字典序关系建好图再拓扑一下即可,这里有一个比较有意思的trick是他用优先队列,保证了字典序,下面是AC代码:
#include<bits/stdc++.h>
using namespace std;
int cnt,head[100010],ver[200010],nxt[200010];
void add(int u,int v){ver[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;
}
unordered_map<string,int> ID;
unordered_map<int,string> findbyID;
int n,strtot;
int ind[200010];
typedef pair<string,int> node;
vector<string> ans;
int main(){cin>>n;for(int i=0;i<=100000;i++) head[i]=-1;vector<string> pre,now;for(int i=1;i<=n;i++){string str;cin>>str;for(int p=0;p<str.size();p++){string nows;while(p<str.size()&&str[p]!='.') nows+=str[p++];if(ID[nows]==0){ID[nows] = ++strtot;findbyID[strtot] = nows;}now.push_back(nows);}if(pre.size()==now.size()){int p=0;while(pre[p]==now[p]) p++;add(ID[pre[p]],ID[now[p]]);ind[ID[now[p]]]++;}pre.swap(now);now.clear();}priority_queue<node, vector<node>, greater<node>> q;for(auto& [str, id] : ID) {if(!ind[id]) q.emplace(str, id);}while(!q.empty()){ans.push_back(q.top().first);int u=q.top().second;q.pop();for(int i=head[u];i!=-1;i=nxt[i]){int v=ver[i];ind[v]--;if(!ind[v]) q.push({findbyID[v],v});}}cout<<ans[0];for(int i=1;i<ans.size();i++) cout<<"."<<ans[i];
}
相关文章:
天梯赛数据结构合集
1.集合操作:PTA | 程序设计类实验辅助教学平台 主要是注意set的取交集操作,AC代码: #include<bits/stdc.h> using namespace std; int n,m,k; set<int> a[60]; int main(){cin>>n;for(int i1;i<n;i){cin>>m;for…...
2025Github介绍与注册(有图片讲解,保姆级)
为什么要注册Github账号 利于团队协作,特别是打比赛的队友 版本控制强大,代码安全 开源项目多,方便个人模仿或抄袭 方便托管,形成自动化工具链 教育福利,教育参与者暂时免费 讲解完了优势,下面讲注册 Gith…...
决战浏览器渲染:减少重绘(Repaint)与重排(Reflow)的性能优化策略
在现代Web开发中,流畅的用户体验是衡量应用质量的关键指标之一。用户与界面的每一次交互,背后都牵动着浏览器复杂而精密的渲染过程。当这个过程不够高效时,用户就会感受到卡顿、延迟,甚至页面“掉帧”。在众多影响渲染性能的因素中…...
好数对的数目
题目描述 给你一个整数数组 nums。 如果一组数字 (i, j) 满足 nums[i] nums[j] 且 i < j,就可以认为这是一组 好数对。 返回 好数对 的数目。 示例 示例 1: 输入:nums [1,2,3,1,1,3] 输出:4 解释: 有 4 组好…...
C++ STL编程-vector概念、对象创建
vector 概念:是常见的一种容器,被称为“柔性数组”。 在vector中,front()是数组中的第一个元素,back()是数组的最后一个元素。begin()是是指向第一个元素,end()是指向back()的后一个元素 vector的对象创建࿰…...
RUI电视桌面中文版:下载安装教程及桌面固件包获取全攻略
在智能电视的使用过程中,一款出色的桌面系统能极大提升用户体验,RUI电视桌面中文版就是这样一个不错的选择。下面为大家详细介绍RUI电视桌面中文版的下载安装教程以及桌面固件包的获取方法。 一、桌面固件包获取 首先是获取桌面固件包。可以通过RUI官方…...
OpenAI 34页最佳构建Agent实践
penAI发布O4,也发布34页最佳构建Agent实践,值得阅读。 什么是Agent? 传统软件使用户能够简化和自动化工作流程,而代理能够以高度独立的方式代表用户执行相同的工作流程。 代理是能够独立地代表您完成任务的系统。 工作流程是必…...
HOOPS Exchange 与HOOPS Communicator集成:打造工业3D可视化新标杆!
一、概述 在工业3D开发、BIM建筑、数字孪生和仿真分析等高端应用场景中,数据格式复杂、模型体量庞大、实时交互体验要求高,一直是困扰开发者的难题。Tech Soft 3D旗下的HOOPS Exchange和HOOPS Communicator,正是解决这类问题的黄金搭档。二者…...
C#进阶学习(六)单向链表和双向链表,循环链表(下)循环链表
目录 📊 链表三剑客:特性全景对比表 一、循环链表节点类 二、循环链表的整体设计框架 三、循环列表中的重要方法: (1)头插法,在头结点前面插入新的节点 (2)尾插法实现插入元素…...
后端程序员工作复盘(一)
1、工作不是为了解决问题,而是为了生活目标。 2、不能当救火队员,要提前预防问题的产生、避免问题的出现。 3、后端表设计和接口设计,要考虑到扩展性,要灵活。无论页面如何变动,后端的改动量都最小,要以不…...
禅道部署进阶指南:从搭建到高可用,全程打怪升级!
禅道在生产环境中的更专业部署方案,包括 Linux 服务器部署、Docker 安装方案、性能优化、安全建议和常见企业级集成方式,适合团队使用或对稳定性、安全性有较高要求的项目。 ✅ 一、企业级部署方案(适合 Linux 环境) 🖥 环境要求 操作系统:CentOS 7+/Ubuntu 18+(推荐)…...
文章记单词 | 第36篇(六级)
一,单词释义 wit [wɪt] n. 智慧;才智;机智;风趣的人dreadful [ˈdredfl] adj. 糟糕透顶的;可怕的;令人畏惧的innocent [ˈɪnəsnt] adj. 无辜的;天真无邪的;无罪的;无…...
Unity使用Newtonsoft.Json本地化存档
我是标题 1.依赖包2.原理:3.代码4.可用优化5.数据加密 1.依赖包 Newtonsoft请在PacakgeManager处下载。 参考:打工人小棋 2.原理: 把要存储的对象数据等使用JsonConvert.SerializeObject(object T)进行序列化为字符串,并且通过…...
Java研学-MybatisPlus(一)
一 概述 MyBatis-Plus(简称 MP)是一款基于 MyBatis 的增强工具,旨在简化开发、提高效率。它在保留 MyBatis 所有特性的基础上,提供了丰富的功能,减少了大量模板代码的编写。 1 核心特性: ① 无侵入增强&am…...
2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(六级)真题
青少年软件编程(Python)等级考试试卷(六级) 分数:100 题数:38 答案解析:https://blog.csdn.net/qq_33897084/article/details/147341458 一、单选题(共25题,共50分) 1. 在tkinter的…...
OpenVINO怎么用
目录 OpenVINO 简介 主要组件 安装 OpenVINO 使用 OpenVINO 的基本步骤 OpenVINO 简介 OpenVINO(Open Visual Inference and Neural Network Optimization)是英特尔推出的一个开源工具包,旨在帮助开发者在英特尔硬件平台上高效部署深度学…...
欧拉服务器操作系统安装MySQL
1. 安装MySQL服务器 1. 更新仓库缓存 sudo dnf makecache2. 安装MySQL sudo dnf install mysql-server2. 初始化数据库 sudo mysqld --initialize --usermysql3. 启动数据库服务 # 启动服务 sudo systemctl start mysqld# 设置开机自启 sudo systemctl enable mysql…...
【零基础】基于 MATLAB + Gurobi + YALMIP 的优化建模与求解全流程指南
MATLAB Gurobi YALMIP 综合优化教程(进阶) 本教程系统介绍如何在 MATLAB 环境中使用 YALMIP 建模,并通过 Gurobi 求解器高效求解线性、整数及非线性优化问题。适用于工程、运营研究、能源系统等领域的高级优化建模需求。 一、工具概览 1.…...
Python 浮点数运算之谜:深入解析round(0.675, 2)等输出异常
一、问题背景:当浮点数运算遇见 “反直觉” 结果 在 Python 开发中,以下代码输出常让开发者困惑: print(round(0.675, 2)) # 预期0.67,实际0.68||预期0.68,实际0.67 print(0.1 0.2) # 预期0.3&…...
【C#】Html转Pdf,Spire和iTextSharp结合,.net framework 4.8
🌹欢迎来到《小5讲堂》🌹 🌹这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。🌹 🌹温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!&#…...
极狐GitLab 注册限制如何设置?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 注册限制 (BASIC SELF) 您可以对注册实施以下限制: 禁用新注册。新注册需要管理员批准。需要用户电子邮件确认。…...
利用大模型实现地理领域文档中英文自动化翻译
一、 背景描述 在跨国性企业日常经营过程中,经常会遇到专业性较强的文档翻译的需求,例如法律文书、商务合同、技术文档等;以往遇到此类场景,企业内部往往需要指派专人投入数小时甚至数天来整理和翻译,效率低下&#x…...
SGFormer:卫星-地面融合 3D 语义场景补全
论文介绍 题目:SGFormer: Satellite-Ground Fusion for 3D Semantic Scene Completion 会议:IEEE / CVF Computer Vision and Pattern Recognition Conference 论文:https://www.arxiv.org/abs/2503.16825 代码:https://githu…...
Trinity三位一体开源程序是可解释的 AI 分析工具和 3D 可视化
一、软件介绍 文末提供源码和程序下载学习 Trinity三位一体开源程序是可解释的 AI 分析工具和 3D 可视化。Trinity 提供性能分析和 XAI 工具,非常适合深度学习系统或其他执行复杂分类或解码的模型。 二、软件作用和特征 Trinity 通过结合具有超维感知能力的不同交…...
城市街拍暗色电影胶片风格Lr调色教程,手机滤镜PS+Lightroom预设下载!
调色介绍 城市街拍暗色电影胶片风格 Lr 调色,是借助 Adobe Lightroom 软件,为城市街拍的人像或场景照片赋予独特视觉风格的后期处理方式。旨在模拟电影胶片质感,营造出充满故事感与艺术感的暗色氛围,让照片仿佛截取于某部充满张力…...
【家政平台开发(55)】家政平台数据生命线:备份与恢复策略全解析
本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析,剖析家政行业现状、挖掘用户需求与梳理功能要点,到系统设计阶段的架构选型、数据库构建,再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化,测试阶段多维度保障平台质量,…...
加密和解密(大语言模型)
看到很多对matlab的p文件加密方案感兴趣的。网络上技术资料比较少,所以,我让大语言模型提供一些概论性质的东西,转发出来自娱自乐。期望了解p文件加密的复杂度,而不是一定要尝试挑战加密算法。 但根据大语言模型提供的材料&#…...
双轮驱动能源革命:能源互联网与分布式能源赋能工厂能效跃迁
在全球能源结构深度转型与“双碳”目标的双重驱动下,工厂作为能源消耗的主力军,正站在节能变革的关键节点。能源互联网与分布式能源技术的融合发展,为工厂节能开辟了全新路径。塔能科技凭借前沿技术与创新实践,深度探索能源协同优…...
React 更新 state 中的数组
更新 state 中的数组 数组是另外一种可以存储在 state 中的 JavaScript 对象,它虽然是可变的,但是却应该被视为不可变。同对象一样,当你想要更新存储于 state 中的数组时,你需要创建一个新的数组(或者创建一份已有数组…...
ubantu18.04HDFS编程实践(Hadoop3.1.3)
说明:本文图片较多,耐心等待加载。(建议用电脑) 注意所有打开的文件都要记得保存。 第一步:准备工作 本文是在之前Hadoop搭建完集群环境后继续进行的,因此需要读者完成我之前教程的所有操作。 第二步&am…...
