天梯赛刷题小记 —— L2
最近在重刷 天梯赛,浅浅记录一下,进入L2阶段了
L2-001 紧急救援
解题思路:典型的dijkstra模板题,带路径记录与权重,方案数记录,解析出过 Dijkstra(兼路径)
#include <bits/stdc++.h>
#define inf 0x3f3f3f
using namespace std;
const int N = 510;
int n, m, s, d;
int mp[N][N];
int dis[N], path[N], num[N], cot[N], sum[N];
bool st[N];
//先找到最短路径,再用相等条件下的最优解,记录最优解路径
//输出最短路径数量,输出最优解能召集到的最多数量的救援队,输出最优解路径void dijkstra(){memset(dis, inf, sizeof(dis));memset(cot, 0, sizeof(cot));memset(st, false, sizeof(st));memset(sum, 0, sizeof(sum));sum[s] = num[s];cot[s] = 1;dis[s] = 0;for(int i =0; i<n; i++){int t = -1;for(int j=0; j<n; j++)if(!st[j] && ( t == -1 || dis[t] > dis[j])) t = j;st[t] = true;//cout<<t<<endl;for(int j = 0; j<n; j++){if(dis[j] > dis[t] + mp[t][j]){path[j] = t;dis[j] = dis[t] + mp[t][j];cot[j] = cot[t];sum[j] = sum[t] + num[j];}else if(dis[j] == dis[t] + mp[t][j]){cot[j] += cot[t];if(sum[j] < sum[t]+num[j]){sum[j] = sum[t]+num[j];path[j] = t;}}}}
}
void printPath(int x, int y){if(y == x) cout<<x;else {printPath(x, path[y]);cout<<' '<<y;}
}
int main()
{cin>>n>>m>>s>>d;memset(mp, inf, sizeof(mp));memset(num, 0, sizeof(num));int x, y,z; for(int i = 0; i< n; i++) cin>>num[i];while(m--){cin>>x>>y>>z;mp[y][x] = mp[x][y] = min(mp[x][y], z);}dijkstra();cout<<cot[d]<<' '<<sum[d]<<endl;printPath(s, d);return 0;
}
L2-002 链表去重
解题思路:指针,先读入,再两个分别用两个指针指向两个序列,记录序列头,重复情况用st记录键值最大也就1e4
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
bool st[N];
int e[N], ne[N];
int main()
{int fpos, anspos1=-1, anspos2 = -1, spos = -1, tpos = -1,n;cin>>fpos>>n;int a, b, c;for(int i = 0; i<n ;i++){cin>>a>>b>>c;e[a] = b; ne[a] = c;}memset(st, false, sizeof(st));while(fpos != -1){if(st[abs(e[fpos])] == false ) {if(anspos1 == -1) anspos1 = fpos, anspos2= fpos;else ne[anspos2] = fpos, anspos2 = fpos; st[abs(e[fpos])] = true;}else{if(spos == -1) spos = fpos, tpos = fpos;else ne[tpos] = fpos , tpos = fpos;}fpos = ne[fpos];}ne[tpos] = -1;ne[anspos2] = -1;while(anspos1 != -1){printf("%05d %d ", anspos1, e[anspos1]);if(ne[anspos1] != -1) printf("%05d\n", ne[anspos1]);else cout<<-1<<endl;anspos1 = ne[anspos1];}while(spos != -1){printf("%05d %d ", spos, e[spos]);if(ne[spos] != -1) printf("%05d\n", ne[spos]);else cout<<-1<<endl;spos = ne[spos];}return 0;
}
L2-003 月饼
解题思路:自定义排序,测试点2是 库存或者价格可能为小数
L2-004 这是二叉搜索树吗?
解题思路:树的遍历与遍历序列切割,经典,找符合条件的左右孩子,重塑树,同时考虑单调的特殊情况。
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e3+10;vector<int > ans, ans2, p(1010);
void build1(int l, int r){if(l > r) return ; int x = l+1, y = r;while(x <= r && p[x] < p[l]) x++;while(y > l && p[y] >= p[l]) y--;if(x - y != 1 ) return ;build1(l+1, y);build1(x, r);ans2.push_back(p[l]);
}
void build2(int l, int r){//镜像if(l > r) return ;int x = l+1, y = r;while(x <= r && p[x] >= p[l]) x++;while(y > l && p[y] < p[l]) y--;if(x - y != 1 ) return ;build2(l+1, y);build2(x, r);ans2.push_back(p[l]);
}
signed main()
{int n;cin>>n;for(int i = 1; i<=n; i++){cin>>p[i];}build1(1, n);bool flag = false;if(ans2.size() == n){cout<<"YES"<<endl;for(int i = 0; i< ans2.size(); i++)if(i == 0) cout<<ans2[0];else cout<<' '<<ans2[i];}else{ans2.clear();build2(1, n);if(ans2.size() == n){cout<<"YES"<<endl;for(int i = 0; i< ans2.size(); i++)if(i == 0) cout<<ans2[0];else cout<<' '<<ans2[i];}else {cout<<"NO";}}cout<<endl;return 0;
}
L2-005 集合相似度
解题思路:STL yyds, 用set, find
L2-006 树的遍历
解题思路:思考过程如下,经典的知道其中两个遍历序列,求另一种,这里是求了层序遍历复杂点,求先序简单。

#include <bits/stdc++.h>
using namespace std;
const int N = 500;
struct node{int x, l, r;
}tree[N];
int last[N], mid[N];
int idx = 0;
vector<int > ans ;
int rebuild(int l1, int r1, int l2, int r2){int pos;if(l1 > r1) return -1;for(int i = l1; i<= r1; i++)if(mid[i] == last[r2]){pos = i; break;}idx++;int ret = idx;tree[ret].x = last[r2];tree[ret].l = rebuild( l1, pos-1, l2, l2+pos-1-l1);tree[ret].r = rebuild( pos+1, r1, l2+pos-l1, r2-1);return ret;
}
void bfs(){queue<int> q;q.push(1);ans.clear();while(q.size()){int tmp = q.front();q.pop();if(tree[tmp].l != -1) q.push(tree[tmp].l);if(tree[tmp].r != -1) q.push(tree[tmp].r);ans.push_back(tree[tmp].x);}
}
int main()
{int n;cin>>n;for(int i = 1; i<=n; i++) cin>>last[i];for(int i = 1; i<=n; i++) cin>>mid[i];int pos = rebuild( 1, n, 1, n);bfs();cout<<ans[0];for(int i=1; i<ans.size(); i++)cout<<' '<<ans[i];cout<<endl;return 0;
}
L2-007 家庭房产
解题思路:结构体,自定义比较函数,并查集,格式化输出,状态计数
首先读入,对所有存在的人计数,人的编号都4位,同时合并集合,使用临时容器,开始合并同集合的人数与房产,重新标记不重复找出所有的答案,再对答案进行排序输出。
AC代码:
#include <bits/stdc++.h>
#define ll long long
#define rep(x, a, b) for(int x = a; x <= b; x++)
#define pre(x, a, b) for(int x = b; x >= a; x--)
using namespace std;
const int N = 1e4+10;
//家庭信息首先按人均面积降序输出,若有并列,则按成员编号的升序输出。
//并查集!,合并同一家人的信息,先合并,合并人数和房产信息,合并到家庭成员的最小编号的身上,边读边合并吗?
bool st[N], st2[N];
int f[N];
struct node{int id, cotm, sumh;ll sum;
}nd[N], ans[N], tmp[N];
bool cmp(node a, node b){if(a.sum*1.0* b.cotm != b.sum*1.0 * a.cotm) return a.sum*1.0* b.cotm > b.sum*1.0 * a.cotm;return a.id<b.id;
}
int find(int x){if(x == f[x]) return x;else find(f[x]);
}
void merge(int a, int b){int x = find(a), y = find(b);if(x > y) f[x] = y; else f[y] = x;
}int main()
{int n;int a, b ,c, d, tmpcot, tmparea;cin>>n;memset(st2, false, sizeof(st));memset(st, false, sizeof(st));for(int i = 0; i< N; i++) f[i] = i; //并查集初始化for(int i = 0; i< n; i++){cin>>a>>b>>c>>d;st[a] = true;if(b != -1) merge(a, b), st[b] = true;if(c != -1) merge(a, c) , st[c] = true;for(int j = 0; j< d; j++){cin>>b;if(b != -1) merge(b, a),st[b] = true;}cin>>tmpcot>>tmparea;nd[i].id = a;nd[i].cotm = d; nd[i].sumh = tmpcot; nd[i].sum = tmparea;}for(int i = 0; i<N; i++){int t = find(nd[i].id);tmp[t].sumh += nd[i].sumh;tmp[t].sum += nd[i].sum;if(st[i]) tmp[find(i)].cotm++;}int idx = 0;for(int i = 0; i<N; i++){int x = find(i);if(st[x] && !st2[x]){ans[idx].id = x;ans[idx].cotm = tmp[x].cotm;ans[idx].sumh = tmp[x].sumh;ans[idx].sum = tmp[x].sum;idx++;st2[x] = true;}}sort(ans, ans+idx, cmp);cout<<idx<<endl;for(int i = 0; i< idx; i++){printf("%04d %d %.3lf %.3lf\n", ans[i].id, ans[i].cotm, (double)(ans[i].sumh*1.0/ans[i].cotm), ans[i].sum*1.0/ans[i].cotm);}return 0;
}
L2-008 最长对称子串
解题思路:字符串,指针
L2-009 抢红包
解题思路:自定义排序,结构体
L2-010 排座位
解题思路:数量级比较小,关系用二维矩阵记录,朋友的朋友,与敌人之间的共同朋友用并查集解决,再做个判断。
L2-011 玩转二叉树
解题思路:与L2-006 树的遍历差不多,样例树都长得一样6
L2-012 关于堆的判断
解题思路:考察了堆的特质,注意点是读入,读完之后要把整行都吸收了,不然会影响后面的判断。make_heap(a.begin(),a.end(),greater<int>());, 用容器也可以,自己简单的堆排序也可以
相关文章:
天梯赛刷题小记 —— L2
最近在重刷 天梯赛,浅浅记录一下,进入L2阶段了 L2-001 紧急救援 解题思路:典型的dijkstra模板题,带路径记录与权重,方案数记录,解析出过 Dijkstra(兼路径) #include <bits/stdc.h> #define inf…...
Prometheus监控实战系列十九:监控Kubernetes集群(上)
Kuberentes是一款开源的容器编排产品,由Google开发后发布到社区,并在2015年将该项目捐献给了云原生基金会(Cloud Native Computing Foundation)。从2014年第一个版本发布以来,Kubernetes便迅速获得开源社区的追捧&…...
番茄学习法——亲测超级好用
今天给大家分享下我最近使用的学习方法,真的非常好用!大家用起来! 在日常的学习和工作中,我们经常会遇到一些难以克服的问题:分心、效率低下、焦虑等。为了帮助人们更好地学习和工作,一些学习方法和工具应运…...
vue 项目中使用高德地图
一、账号准备 首先,需要注册并登录高德地图开放平台,申请密钥。操作指引:高德地图开放平台 二、安装高德地图加载器 npm 安装: npm i amap/amap-jsapi-loader --save或者 yarn 安装: yarn add amap/amap-jsapi-loa…...
【每日一题】病人排队
题目描述小理是个热爱生活的孩子。病人登记看病,小理想编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:1. 老年人(年龄 ≥≥ 60岁)比非老年人优先看病。2. 老年人按年龄从大到小的顺序看病,年龄…...
【数据结构】链表OJ题
目录面试题 02.04 分割链表剑指 Offer II 027 回文链表160 相交链表141 环形链表142 环形链表 II138 复制带随机指针的链表面试题 02.04 分割链表 定义lesshead和greaterhead链接小于和大于等于k的值分别设置哨兵位和尾节点指针最后将两表去除哨兵位再链接 struct ListNode* p…...
冒泡 VS 插入 VS 选择——谁更胜一筹?(附排序源码)
文章目录什么样的“排序算法”更加优质?排序算法的执行效率排序算法的内存消耗排序算法的稳定性冒泡排序(Bubble Sort)插入排序(Insertion Sort)选择排序(Selection Sort)最终的胜利者…...
[python tools] 今天看到另一个配置工具 YACS,所以做下笔记
YACS 实际上就只是把别人的readme翻译了一下 github: https://github.com/rbgirshick/yacs 样例代码: https://github.com/Wuziyi616/multi_part_assembly/blob/master/docs/config.md 一、使用方法 1. 首先搞一个config的python文件,用来存一下基本的配置信息 比…...
Prometheus cadvisor容器监控和node-exporter节点监控
往期文章 Prometheus监控系统 https://blog.csdn.net/qq_39578545/article/details/108754585 Docker之compose介绍 使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。下面介绍Docker官方产品,Docker Comp…...
机器学习|正则化|评估方法|分类模型性能评价指标|吴恩达学习笔记
前文回顾:逻辑回归 目录 📚正则化 🐇过拟合的问题 🐇代价函数 🐇正则化线性回归 🐇正则化的逻辑回归模型 📚模型评估方法 🐇留出法(hold-out) &#…...
python迭代器详解
不懂的问题:什么是协变、逆变?渐进式? _T_co TypeVar("_T_co", covariantTrue) # Any type covariant containers.作者:20岁爱吃必胜客(坤制作人),近十年开发经验, 跨域学习者&…...
关于Docker逃逸
关于Docker逃逸 文章目录关于Docker逃逸前言一、判断是否为docker容器?二、privileged特权模式启动容器逃逸三、 Docker Remote API未授权访问逃逸四、危险挂载导致Docker逃逸五、危险挂载Docker Socket逃逸六、 挂载宿主机procfs逃逸七、脏牛漏洞来进行docker逃逸八…...
@Autowired和@Resource区别
Autowired和Resource到底有什么区别 Autowired 和 Resource 都是用来实现依赖注入的注解(在 Spring/Spring Boot 项目中),但二者却有着 5 点不同: 来源不同:Autowired 来自 Spring 框架,而 Resource 来自…...
动态内存管理详细讲解
目录 1.为什么存在动态内存分配 2. 动态内存函数的介绍 2.1 malloc和free 2.2 calloc 2.3 realloc 今天要和大家分享的内容是的动态内存管理,我们先从他的定义入手学习。 1.为什么存在动态内存分配 我们到现在已经掌握了内存开辟的方式就是要么创建一个变量…...
Python和Excel的完美结合:常用操作汇总(案例详析)
在以前,商业分析对应的英文单词是Business Analysis,大家用的分析工具是Excel,后来数据量大了,Excel应付不过来了(Excel最大支持行数为1048576行),人们开始转向python和R这样的分析工具了&#…...
卡特兰数、斯特林数基础
卡特兰数 从格点(0,0)(0,0)(0,0)走到格点(n,n)(n,n)(n,n),只能向右或向上走,不能穿过对角线,的路径的条数,称为卡特兰数HnH_nHn。 则有H01H_01H01。 通项公式: Hn(2nn)−(2nn−1)H_n\begin{pmatrix} 2n\\ n \en…...
STL——mapmultimap和setmultiset
一、关联式容器 与序列式容器相同,关联式容器也是用于存储数据的,不同的是,关联式容器里存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。 二、键值对 用来表示具有一一对应的一种结构,该…...
2023热门抖音权重查询小程序源码
2023热门抖音权重查询小程序源码 跟抖音上很火的一模一样,小程序适配优化。接口免费。小程序不是网页 修改教程: 1,如果想修改或者去除水印,直接删除或修改“index.html”12~22行 2,如果想修改logo,直接…...
153.网络安全渗透测试—[Cobalt Strike系列]—[生成hta/exe/宏后门]
我认为,无论是学习安全还是从事安全的人多多少少都会有些许的情怀和使命感!!! 文章目录一、后门简介1、hta后门2、exe后门3、宏病毒后门二、生成后门并测试0、测试环境1、生成hta后门并测试2、生成exe后门并测试3、生成宏病毒后门…...
如何成为优秀的程序员
崔宝秋,现任小米首席架构师、小米云平台负责人。1995年赴美留学,纽约州立大学石溪分校计算机科学系博士毕业,曾任IBM高级工程师和高级研发经理、雅虎搜索技术核心团队主任工程师、LinkedIn主任工程师,2012年回国加入小米科技。 20…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...
算法—栈系列
一:删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...
起重机起升机构的安全装置有哪些?
起重机起升机构的安全装置是保障吊装作业安全的关键部件,主要用于防止超载、失控、断绳等危险情况。以下是常见的安全装置及其功能和原理: 一、超载保护装置(核心安全装置) 1. 起重量限制器 功能:实时监测起升载荷&a…...
npm install 相关命令
npm install 相关命令 基本安装命令 # 安装 package.json 中列出的所有依赖 npm install npm i # 简写形式# 安装特定包 npm install <package-name># 安装特定版本 npm install <package-name><version>依赖类型选项 # 安装为生产依赖(默认&…...
World-writable config file /etc/mysql/mysql.conf.d/my.cnf is ignored
https://stackoverflow.com/questions/53741107/mysql-in-docker-on-ubuntu-warning-world-writable-config-file-is-ignored 修改权限 -> 重启mysql # 检查字符集配置 SHOW VARIABLES WHERE Variable_name IN (character_set_server, character_set_database ); --------…...
信息收集:从图像元数据(隐藏信息收集)到用户身份的揭秘 --- 7000
目录 🌐 访问Web服务 💻 分析源代码 ⬇️ 下载图片并保留元数据 🔍 提取元数据(重点) 👤 生成用户名列表 🛠️ 技术原理 图片元数据(EXIF 数据) Username-Anarch…...
