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

Hello 2024补题

Wallet Exchange(Problem - A - Codeforces)

题目大意:A,B做游戏,它们的钱包里各有a,b个硬币,轮到它们操作时,它们可以扔掉自己或者对手钱包里的硬币,谁不能操作谁输,问最后的胜者是谁。

思路:很显然取决于总数的奇偶性,奇数则A胜,偶数则B胜。

#include<bits/stdc++.h>
using namespace std;
int main()
{int t;scanf("%d",&t);while(t--){int a,b;scanf("%d%d",&a,&b);a += b;if(a%2) printf("Alice\n");else printf("Bob\n");}
}

Plus-Minus Split(Problem - B - Codeforces)

题目大意:+代表1,-代表-1,给定一个字串,要求进行划分(划分中原来的相对顺序不能改变),每个划分的值是划分内的和的绝对值*划分的长度,结果是各个划分值的和,问最小的结果是多少。

思路:很显然只要划分的和为0,那么这段划分的值就最小,我们只用看有多少不能抵消,如果不能抵消那么就一个一个划开,使长度最小。

#include<bits/stdc++.h>
using namespace std;
int main()
{int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);string s;cin>>s;int c=0;for(int i=0;i<n;i++){if(s[i]=='+') c++;else c--;}printf("%d\n",abs(c));}
}

Grouping Increases(Problem - C - Codeforces)

题目大意:现有一个a[],需要把它拆成两个数组,a[]中的元素只能属于两个数组之一,而且相对顺序不能改变,然后我们去计算两个数组中b[i]<b[i+1]的数对的对数和,要求输出最小和。

思路:这道题实际上是贪心的题目,因为只需要考虑相邻元素之间的关系,我们只用记录新数组最后位置的元素即可,假设已经插入了i-1个元素了,现在要插入第i个元素,而此时新数组的两个元素分别为b,c,且b<c(b==c那么两个数组完全等价,没有讨论的必要,随便插入一个即可),那么现在的问题就转化成将a[i]插入哪个数组。a[i]与b,c有三种关系:

1.a[i]<=b<c:此时,无论插入哪个数组都不会产生影响,但是我们注意到a[i]的插入会减小末尾元素,所以如果插c后面,a[i+1]如果小于c,但是大于b,就不得不产生影响,所以为了后面能让更大的数插入不产生影响,我们将它插到b后面。

2.b<c<a[i]:显然插在哪个后面都会造成影响,插入的过程实际上也是增加末尾元素的机会,显然增加b比增加c效益更大,因为增加b后,b,c后面都可以接更大的元素了。

3.b<a[i]=<c:此时插在c后面不会造成影响,另外对于a[i]<a[i+1]<c,a[i]插在b后面a[i+1]插在c后面,与a[i]插在c后面,a[i+1]插在b后面实际影响是等价的(b<a[i+1]<a[i],讨论类似,也是产生1个影响)再者若a[i+1]>c,将a[i]插在c后面还能减少一次影响。

至此贪心部分就讨论完毕。(边界可以再细推一下) 

#include<bits/stdc++.h>
using namespace std;
int main()
{int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);int b=0x3f3f3f3f,c=0x3f3f3f3f;//为了保证b<c始终成立,记得更新后交换int ans=0;for(int i=1;i<=n;i++){int x;scanf("%d",&x);if(x<=b) b=x;else if(x>c) {b=x;swap(b,c);ans++;}else c=x;}printf("%d\n",ans);}
}

这个题的贪心解法和活动 - AcWing第二问有些相似,我们在此处一并讨论一下。

每个系统只能拦截非上升子序列,第二问要求找出最少需要配备多少个系统,才能拦截所有的导弹,我们再抽象一点,这题考的就是用多少个非上升的序列可以覆盖整个区间。也是从贪心的角度来进行分析:

假设现在已经有若干个系统了,然后要拦截高度为h的导弹,我们有两种选择,一种是用已经有的系统去拦截,另一种是新开一个系统,根据每个系统的性质我们可以知道,系统末尾元素肯定是最小的,而且比它大的元素不能接在它后面,所以如果所有系统的末尾都小于h,那么只能新开,如果有一部分系统的末尾不小于h,那么为了使结果尽可能的少,肯定是接在它们中某一个的后面更划算,那么就要考虑接在谁的后面更好,把h接上后会减少序列末尾的值,为了使它们能够拦截后面更高的导弹,肯定是将h接在这些序列中小的那个后面才是最优的解法。进而我们考虑如果维护,显然这些结尾是满足单调递增的关系的,这样就可以二分查找答案。进而该题的贪心部分分析完毕。

这两题都有一个很明显是贪心的点,就是需要对于每一个点进行决策,那么对每一个决策讨论的过程就是贪心的过程。所以下次涉及需要对一个区间进行操作,而且每步操作需要考虑策略的时候就要想一想贪心是否可以。

01 Tree(Problem - D - Codeforces)

题目大意:给出一个序列,我们需要判断这个序列是否与某个特定二叉树dfs遍历的叶子节点序相同,这里的特定二叉树是指除了叶子节点外的节点都有两个子节点,同时两条边的边权一个为1,一个为0.

思路:这里的叶子节点可能有兄弟节点,也可能没有兄弟节点。来看叶子节点与父节点的关系,父节点与其中一个子节点的值相同,比另一个子节点的值小1,那么如果一个点的左右相邻位置有比它小1的值,那么就说明它可能有兄弟节点,我们如果删除较大的子节点,那么因为另一个子节点的值与父节点的值相同,所以实际上相当于删除了两个子节点,将父节点变成一个叶子节点。我们可以确定值最大的那个点一定有兄弟节点,我们从最大的那个入手,不断往前删,最后如果只有一个点没被删,而且值为0,那么就说明有这样的二叉存在。

#include<bits/stdc++.h>
using namespace std;
const int N=200010;
int a[N],l[N],r[N],st[N];
int n;
int ok(int k)
{if(k<1||k>n) return 0;if(a[k]-a[l[k]]==1||a[k]-a[r[k]]==1) return 1;return 0;
}
int main()
{int t;scanf("%d",&t);while(t--){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);l[i]=i-1;r[i]=i+1;st[i]=0;}a[0]=a[n+1]=-10;//指针会指到它们,初始化一下,防止误判priority_queue<pair<int,int>>p;for(int i=1;i<=n;i++){if(ok(i)){st[i]=1;p.push({a[i],i});}}while(p.size()){auto it=p.top();p.pop();int v=it.first,i=it.second;//这里更新一定要特别注意,很容易出错。l[r[i]]=l[i];r[l[i]]=r[i];if(!st[l[i]]&&ok(l[i])){st[l[i]]=1;p.push({a[l[i]],l[i]});}if(!st[r[i]]&&ok(r[i])){st[r[i]]=1;p.push({a[r[i]],r[i]});}}int f=0,v=3e5;for(int i=1;i<=n;i++){if(!st[i])f++;v=min(v,a[i]);}if(f==1&&v==0) printf("YES\n");else printf("NO\n");}
}

有时候做不出来的意义只是告诉你该学什么东西了,别附加太多别的意义。

相关文章:

Hello 2024补题

Wallet Exchange&#xff08;Problem - A - Codeforces&#xff09; 题目大意&#xff1a;A&#xff0c;B做游戏&#xff0c;它们的钱包里各有a,b个硬币&#xff0c;轮到它们操作时&#xff0c;它们可以扔掉自己或者对手钱包里的硬币&#xff0c;谁不能操作谁输&#xff0c;问…...

git权限问题导致的所有文件被修改问题

git忽略文件权限的修改 git config core.filemode false...

C语言经典算法之堆排序算法

目录 前言 建议 简介 A.建堆&#xff1a; B.排序 一、代码实现 二、时空复杂度 A.时间复杂度 B.空间复杂度 三、稳定性 四、现实中的应用 前言 建议 1.学习算法最重要的是理解算法的每一步&#xff0c;而不是记住算法。 2.建议读者学习算法的时候&#xff0c;自己…...

前端笔试题(一)

1.vue如何实现数据的双向绑定 利用v-model来实现双向数据绑定 通过Object.defineProperty()来劫持各个属性的setter&#xff0c;getter&#xff0c;在数据变动时发布消息给订阅者&#xff0c;触发相应的监听回调来渲染视图 2.使用vue渲染大量数据时&#xff0c;如何进行优化…...

Springboot开发的大学生寝室考勤系统刷脸进出宿舍系统技术文档

宿舍出入系统 1.2采集学生人脸信息和宿管人脸信息 前端使用navigator.mediaDevices.getUserMedia&#xff08;考虑个浏览器的内核差异&#xff0c;此处以最新的标准API:navigator.mediaDevices.getUserMedia为例&#xff09;获取用户浏览器的摄像头并开启视频&#xff0c;使用…...

网络共享服务

存储类型&#xff1a;直连式&#xff08;DAS&#xff09;:距离最近&#xff0c;存储设备且直接连接到服务器上 存储区域网络&#xff08;SAN&#xff09;&#xff1a;适用于大型应用或数据库系统&#xff0c;可以使用文件的空间&#xff0c; 以及管理空间…...

资本主义的市场竞争?IBM总监Jerry Chow 谈量子计算的未来

​ 人物介绍&#xff1a;Jerry M.Chow博士在耶鲁大学取得物理博士学位。担任IBM量子系统总监&#xff0c;其研究重点是面向容错量子计算的多量子比特系统。他主要为IBM的量子系统路线图制定战略&#xff0c;与硬件团队领导者一起设定目标研究领域&#xff0c;同时也确保最佳的客…...

什么是残差矢量量化?

一、说明 基于残差矢量量化的神经音频压缩方法正在重塑现代音频编解码器的格局。在本指南中&#xff0c;了解 RVQ 背后的基本思想以及它如何增强神经压缩。 数据压缩在当今的数字世界中发挥着关键作用&#xff0c;促进信息的高效存储和传输。由于当今超过 80% 的互联网流量来自…...

计算机网络(第六版)复习提纲2

二、物理层 2.1 物理层基本概念 物理层协议常常成为物理层规程 物理层的主要任务为确定与传输媒体的接口有关的一些特性&#xff1a; 1.机械特性&#xff1a;指明接口所用接线器的尺寸等&#xff1b; 2.电气特性&#xff1a;指明接口电缆各条线上的电压范围&#xff1b; 3.功能…...

11k+star 开源笔记应用真香 centos部署教程

leanote binary installation on Mac and Linux (En) life edited this page on Jul 21, 2017 10 revisions Pages 26 Home How to develop leanote 如何开发leanote How to install leanote on Ubuntu? How to Upgrade Leanote Install Mongodb leanote api leanote …...

win下安装tensorflow

1首先ctrlaltdelete打开任务管理器查看GPU型号 2或者右键我的电脑然后如下方式查看显卡发现没有navida没有GPU...

SpringBoot 入门

1.SpringBoot介绍 1.1.什么是SpringBoot Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其中“Boot”的意思就是“引导”&#xff0c;Spring Boot 并不是对 Spring 功能上的增强&#xff0c;而是提供了一种快速开发 Spring应用的方式。 1.2.Spring Boot 特点 • 嵌…...

使用WebFlux处理WebSocket连接的全生命周期案例

使用WebFlux处理WebSocket连接的全生命周期案例 简介&#xff1a; 在Web应用程序开发中&#xff0c;WebSocket是一种用于实现双向通信的协议。Spring WebFlux提供了对WebSocket的支持&#xff0c;使您能够轻松地处理WebSocket连接和消息。本博客将介绍如何使用WebFlux处理WebS…...

【REST2SQL】10 REST2SQL操作指南

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 【REST2SQL】07 GO 操作 Mysql 数据库 【RE…...

199_二叉树的右视图

描述 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 思路 对树进行深度优先搜索&#xff0c;在搜索过程中&#xff0c;我们总是先访问右子树。那么对于每一层来说&#xff0c;…...

第七讲_css浮动

css浮动 1. 设置浮动2. 浮动的特点3. 浮动的影响4. 解决浮动的影响4.1 解决父元素高度塌陷的问题4.2 解决对兄弟元素影响问题 1. 设置浮动 浮动是通过float属性设置&#xff0c;float取值范围&#xff1a; none&#xff1a;不浮动&#xff0c;默认值。left&#xff1a;向左浮…...

2024秋招,顺丰科技测试开发工程师一面

前言 今天回顾一下&#xff0c;一个被捞的全流程面试经历 时间线 9月21日测评 10月26日技术一面&#xff0c;本来是11点半开始&#xff0c;我正做另一个笔试呢&#xff0c;突然给我打电话开面 20分钟结束&#xff0c;一开始以为KPI&#xff0c;结果给过了 10月31日技术二…...

基于apache的http文件服务配置

背景&#xff1a; 公司的产品使用的第三方模组可以OTA&#xff0c;厂家提供的是window开启软件&#xff0c;这样就可以在本机做http下载服务器&#xff0c;然后使用端口映射的方式&#xff0c;公开到外网&#xff0c;这样就可以进行4G网络访问内网服务器了。但这个有个弊端&am…...

连铸工艺和模铸工艺有什么区别。

问题描述&#xff1a;连铸工艺和模铸工艺有什么区别。 问题解答&#xff1a; 连铸工艺和模铸工艺在多个方面存在显著差异&#xff1a; 指代不同&#xff1a; 模铸是成批大量生产锻件的锻造方法。连铸即为连续铸钢的锻造方法。 工艺不同&#xff1a; 模铸在锻压机械的作用…...

pyqt treeWidget树生成

生成treeWidget树与获取treeWidget树节点的数据 # encodingUTF-8 import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QApplication, QTreeWidgetItem, QLineEdit, QSpinBox, QComboBox from PyQt5.QtWidgets import QWidget from release_test import Ui_F…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...