当前位置: 首页 > 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…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...