天梯赛刷题小记 —— 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…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...

JDK 17 序列化是怎么回事
如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...