当前位置: 首页 > news >正文

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

最近在重刷 天梯赛&#xff0c;浅浅记录一下&#xff0c;进入L2阶段了 L2-001 紧急救援 解题思路&#xff1a;典型的dijkstra模板题&#xff0c;带路径记录与权重&#xff0c;方案数记录&#xff0c;解析出过 Dijkstra(兼路径) #include <bits/stdc.h> #define inf…...

Prometheus监控实战系列十九:监控Kubernetes集群(上)

Kuberentes是一款开源的容器编排产品&#xff0c;由Google开发后发布到社区&#xff0c;并在2015年将该项目捐献给了云原生基金会&#xff08;Cloud Native Computing Foundation&#xff09;。从2014年第一个版本发布以来&#xff0c;Kubernetes便迅速获得开源社区的追捧&…...

番茄学习法——亲测超级好用

今天给大家分享下我最近使用的学习方法&#xff0c;真的非常好用&#xff01;大家用起来&#xff01; 在日常的学习和工作中&#xff0c;我们经常会遇到一些难以克服的问题&#xff1a;分心、效率低下、焦虑等。为了帮助人们更好地学习和工作&#xff0c;一些学习方法和工具应运…...

vue 项目中使用高德地图

一、账号准备 首先&#xff0c;需要注册并登录高德地图开放平台&#xff0c;申请密钥。操作指引&#xff1a;高德地图开放平台 二、安装高德地图加载器 npm 安装&#xff1a; npm i amap/amap-jsapi-loader --save或者 yarn 安装&#xff1a; yarn add amap/amap-jsapi-loa…...

【每日一题】病人排队

题目描述小理是个热爱生活的孩子。病人登记看病&#xff0c;小理想编写一个程序&#xff0c;将登记的病人按照以下原则排出看病的先后顺序&#xff1a;1. 老年人&#xff08;年龄 ≥≥ 60岁&#xff09;比非老年人优先看病。2. 老年人按年龄从大到小的顺序看病&#xff0c;年龄…...

【数据结构】链表OJ题

目录面试题 02.04 分割链表剑指 Offer II 027 回文链表160 相交链表141 环形链表142 环形链表 II138 复制带随机指针的链表面试题 02.04 分割链表 定义lesshead和greaterhead链接小于和大于等于k的值分别设置哨兵位和尾节点指针最后将两表去除哨兵位再链接 struct ListNode* p…...

冒泡 VS 插入 VS 选择——谁更胜一筹?(附排序源码)

文章目录什么样的“排序算法”更加优质&#xff1f;排序算法的执行效率排序算法的内存消耗排序算法的稳定性冒泡排序&#xff08;Bubble Sort&#xff09;插入排序&#xff08;Insertion Sort&#xff09;选择排序&#xff08;Selection Sort&#xff09;最终的胜利者&#x1f…...

[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文件&#xff0c;用来存一下基本的配置信息 比…...

Prometheus cadvisor容器监控和node-exporter节点监控

往期文章 Prometheus监控系统 https://blog.csdn.net/qq_39578545/article/details/108754585 Docker之compose介绍 使用一个Dockerfile模板文件可以定义一个单独的应用容器&#xff0c;如果需要定义多个容器就需要服务编排。下面介绍Docker官方产品&#xff0c;Docker Comp…...

机器学习|正则化|评估方法|分类模型性能评价指标|吴恩达学习笔记

前文回顾&#xff1a;逻辑回归 目录 &#x1f4da;正则化 &#x1f407;过拟合的问题 &#x1f407;代价函数 &#x1f407;正则化线性回归 &#x1f407;正则化的逻辑回归模型 &#x1f4da;模型评估方法 &#x1f407;留出法&#xff08;hold-out&#xff09; &#…...

python迭代器详解

不懂的问题&#xff1a;什么是协变、逆变&#xff1f;渐进式&#xff1f; _T_co TypeVar("_T_co", covariantTrue) # Any type covariant containers.作者&#xff1a;20岁爱吃必胜客&#xff08;坤制作人&#xff09;&#xff0c;近十年开发经验, 跨域学习者&…...

关于Docker逃逸

关于Docker逃逸 文章目录关于Docker逃逸前言一、判断是否为docker容器&#xff1f;二、privileged特权模式启动容器逃逸三、 Docker Remote API未授权访问逃逸四、危险挂载导致Docker逃逸五、危险挂载Docker Socket逃逸六、 挂载宿主机procfs逃逸七、脏牛漏洞来进行docker逃逸八…...

@Autowired和@Resource区别

Autowired和Resource到底有什么区别 Autowired 和 Resource 都是用来实现依赖注入的注解&#xff08;在 Spring/Spring Boot 项目中&#xff09;&#xff0c;但二者却有着 5 点不同&#xff1a; 来源不同&#xff1a;Autowired 来自 Spring 框架&#xff0c;而 Resource 来自…...

动态内存管理详细讲解

目录 1.为什么存在动态内存分配 2. 动态内存函数的介绍 2.1 malloc和free 2.2 calloc 2.3 realloc 今天要和大家分享的内容是的动态内存管理&#xff0c;我们先从他的定义入手学习。 1.为什么存在动态内存分配 我们到现在已经掌握了内存开辟的方式就是要么创建一个变量…...

Python和Excel的完美结合:常用操作汇总(案例详析)

在以前&#xff0c;商业分析对应的英文单词是Business Analysis&#xff0c;大家用的分析工具是Excel&#xff0c;后来数据量大了&#xff0c;Excel应付不过来了&#xff08;Excel最大支持行数为1048576行&#xff09;&#xff0c;人们开始转向python和R这样的分析工具了&#…...

卡特兰数、斯特林数基础

卡特兰数 从格点(0,0)(0,0)(0,0)走到格点(n,n)(n,n)(n,n)&#xff0c;只能向右或向上走&#xff0c;不能穿过对角线&#xff0c;的路径的条数&#xff0c;称为卡特兰数HnH_nHn​。 则有H01H_01H0​1。 通项公式&#xff1a; Hn(2nn)−(2nn−1)H_n\begin{pmatrix} 2n\\ n \en…...

STL——mapmultimap和setmultiset

一、关联式容器 与序列式容器相同&#xff0c;关联式容器也是用于存储数据的&#xff0c;不同的是&#xff0c;关联式容器里存储的是<key, value>结构的键值对&#xff0c;在数据检索时比序列式容器效率更高。 二、键值对 用来表示具有一一对应的一种结构&#xff0c;该…...

2023热门抖音权重查询小程序源码

2023热门抖音权重查询小程序源码 跟抖音上很火的一模一样&#xff0c;小程序适配优化。接口免费。小程序不是网页 修改教程: 1&#xff0c;如果想修改或者去除水印&#xff0c;直接删除或修改“index.html”12&#xff5e;22行 2&#xff0c;如果想修改logo&#xff0c;直接…...

153.网络安全渗透测试—[Cobalt Strike系列]—[生成hta/exe/宏后门]

我认为&#xff0c;无论是学习安全还是从事安全的人多多少少都会有些许的情怀和使命感&#xff01;&#xff01;&#xff01; 文章目录一、后门简介1、hta后门2、exe后门3、宏病毒后门二、生成后门并测试0、测试环境1、生成hta后门并测试2、生成exe后门并测试3、生成宏病毒后门…...

如何成为优秀的程序员

崔宝秋&#xff0c;现任小米首席架构师、小米云平台负责人。1995年赴美留学&#xff0c;纽约州立大学石溪分校计算机科学系博士毕业&#xff0c;曾任IBM高级工程师和高级研发经理、雅虎搜索技术核心团队主任工程师、LinkedIn主任工程师&#xff0c;2012年回国加入小米科技。 20…...

多线程(四):线程安全

在开始讲解线程安全之前我们先来回顾一下我们学了那些东西了&#xff1a; 1. 线程和进程的认识 2. Thread 类的基本用法 3. 简单认识线程状态 4. 初见线程安全 上一章结束时看了一眼线程安全问题&#xff0c;本章将针对这个重点讲解。 一个代码在单线程中能够安全执行&am…...

[ROC-RK3568-PC] [Firefly-Android] 10min带你了解Camera的使用

&#x1f347; 博主主页&#xff1a; 【Systemcall小酒屋】&#x1f347; 博主追寻&#xff1a;热衷于用简单的案例讲述复杂的技术&#xff0c;“假传万卷书&#xff0c;真传一案例”&#xff0c;这是林群院士说过的一句话&#xff0c;另外“成就是最好的老师”&#xff0c;技术…...

C++之模拟实现string

文章目录前言一、包含的相关头文件二、构造和析构1.构造函数2.拷贝构造1.传统写法2.现代写法3.赋值运算符重载1.传统写法2.现代写法4.析构函数三、iterator四、modify1.push_back(尾插一个字符&#xff09;2.append&#xff08;尾插一个字符串&#xff09;3.运算符重载1.尾插字…...

SpringBoot实战(十三)集成 Admin

目录一、简介二、搭建 springboot-admin 管理服务1.Maven 依赖2.application.yml3.添加 EnableAdminServer4.启动服务&#xff0c;查看页面三、搭建 springboot-admin-client 客户端服务1.Maven 依赖2.application.yml3.启动服务&#xff0c;查看页面四、搭配 Eureka 使用1.搭建…...

mke2fs命令:建立ext2文件系统

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 使用格式 mke2fs [options] [设备名称] [区块数] options与含义 -c&#xff1a;检查是否有损坏的区块。-F&#xff1a;不管指定的设备为何&#xff0c;强制执行mke2fs。-M&#xff1a;记录最后一次挂入的…...

免费分享一个springboot+vue的办公系统

springbootvue的OA系统项目介绍项目部署项目特点项目展示项目介绍 这是一个采用前后端分离开发的项目&#xff0c;前端采用 Vue 开发、后端采用 SpringBoot Mybatis 开发。 很适合java初学者练手和学习。 前端技术&#xff1a;Vue3.2 Vue-Router Pinia Ant Design Vue 3.X…...

STM32数据搬运工DMA

DMA的概念DMA&#xff0c;全称为&#xff1a;Direct Memory Access&#xff0c;即直接存储器访问。DMA 传输方式无需 CPU 直接控制传输&#xff0c;也没有中断处理方式那样保留现场和恢复现场的过程&#xff0c;通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路&#xff…...

4、操作系统——进程间通信(2)(system V-IPC介绍)

目录 一、system V-IPC常识 1、key和ID 2、文件描述符 3、函数&#xff08;ftok&#xff09; ftok产生IPC对象的健值key&#xff08;类似文件路径&#xff09; 4、例子 5、使用命令查看或删除当前系统中的IPC对象 一、system V-IPC常识 1、key和ID &#xff08;1&#x…...

基于CentOS Stream 9平台搭建Nacos2.0.4集群以及OpenResty反向代理

目录展示Nacos2.0.4集群搭建1. 下载2. 解压3.修改配置3.1分别修改下启动类中JDK路径以及启动大小3.2 分别配置数据源3.3 创建nacos数据库3.4 修改cluster.conf配置3.4.1 复制并修改3.4.2 编辑文件&#xff0c;修改三台主机地址3.4.3 分别放入另外两个nacos的conf目录下:4. 启动…...

老杜MySQL入门基础 第二天

导入演示数据 1、连接MySQL 2、创建"bjpowernode"数据库 create database bjpowernode;3、选择数据库 use bjpowernode4、导入数据 source D&#xff1a;\bjpowernode.sql(文件的路径)1 去除重复记录(把查询结果去除重复记录)(原表数据不会改变) 使用关键字dist…...