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");}
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/627853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka的安装、管理和配置

Kafka的安装、管理和配置 1.Kafka安装 官网: https://kafka.apache.org/downloads 下载安装包,我这里下载的是https://archive.apache.org/dist/kafka/3.3.1/kafka_2.13-3.3.1.tgz Kafka是Java生态圈下的一员&#xff0c;用Scala编写&#xff0c;运行在Java虚拟机上&#xf…

【大数据】Flink 详解(九):SQL 篇 Ⅱ

《Flink 详解》系列&#xff08;已完结&#xff09;&#xff0c;共包含以下 10 10 10 篇文章&#xff1a; 【大数据】Flink 详解&#xff08;一&#xff09;&#xff1a;基础篇【大数据】Flink 详解&#xff08;二&#xff09;&#xff1a;核心篇 Ⅰ【大数据】Flink 详解&…

Flutter之配置环境创建第一个项目

随着时代发展&#xff0c;使用Flutter开发的项目越来越多&#xff0c;于是踏上了Flutter开发之路。 作为一个Android开发人员&#xff0c;也只能被卷到与时俱进&#xff0c;下面一起创建一个Flutter项目吧。 一、Android开发&#xff0c;电脑上已经具备了的条件&#xff1a; …

msyql 异常,别干着急,70%的问题都在这里!

性能测试中&#xff0c;数据库的性能问题&#xff0c;可能会占到 70%&#xff0c;所以讲性能测试&#xff0c;数据库是一个非常非常重要的知识。但是&#xff0c;最近在讲 MySQL 数据库的时候&#xff0c;却遇到了一个尴尬。 前言 之前的小伙伴是需要手动安装 MySQL 数据库的&…

pc-lint plus和keil 调用库文件策略的不同

同样一个源文件&#xff08;如"stm32h7xx.h"&#xff09;&#xff0c;keil会先从用户路径找文件&#xff0c;pc-lint会先从keil安装路径找源文件 1、问题 在使用pc-lint检测工程时碰到了一个问题 C:\Users\86151\AppData\Local\Arm\Packs\Keil\STM32H7xx_DFP\2.4.…

武理多媒体信息共享平台的架构设计与实现

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Vue-23、Vue过滤器

1、效果 2、过滤器实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>过滤器</title><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.…

Linux C语言开发(二)C语言数据类型

目录 一.C语言概述 1.1 什么是C语言 1.2 C语言与Linux 1.3 C语言的特点 二.数据类型 2.1数据类型的分类 2.2整型 2.3 字符型 2.4 浮点型 2.5 枚举类型 2.6 数组类型 2.7 结构体类型 2.8 联合体类型 2.9 指针类型 2.10 空类型 2.11 static静态类型 2.12 extern…

HCIP -- 第六天作业

要求&#xff1a; 实现&#xff1a; 3路由策略干涉选路&#xff1a;[R3]ip ip-prefix c permit 13.1.1.0 24 抓住13网段 [R3]route-policy c permit node 10 创建路由策略为C 序号为10 [R3-route-policy]if-match ip-prefix c 匹配路由策略c [R3-route-policy]apply cost-type…

第七讲_css浮动

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

猫咪全罐喂养一个月多少钱?适合给猫咪全罐喂养的猫罐头推荐

不少铲屎官为了防止猫咪挑食和营养吸收不均衡&#xff0c;打算给猫咪进行全罐喂养&#xff0c;但是又担心全罐喂养花费太多钱了。猫咪全罐喂养一个月多少钱&#xff1f;别担心&#xff0c;咱们打工人的养猫攻略&#xff0c;花小钱办大事&#xff01;追求高性价比的猫罐头才是王…

推荐几款常用测试数据自动生成工具(适用自动化测试、性能测试)

一、前言 在软件测试中&#xff0c;测试数据是测试用例的基础&#xff0c;对测试结果的准确性和全面性有着至关重要的影响。因此&#xff0c;在进行软件测试时&#xff0c;需要生成测试数据以满足测试场景和要求。本文将介绍如何利用测试数据生成工具来快速生成大量的测试数据。…

一键完成爬虫之Cookie获取:利用浏览器模拟一个cookie出来、面对反爬虫、加密的cookie的应对方法

一键完成爬虫之Cookie获取&#xff1a;利用浏览器模拟一个cookie出来、面对反爬虫、加密的cookie的应对方法 本文提供一个快速取得cookie的办法&#xff0c;用来应对一些网站的的反爬虫和cookie失效等情况本接口是收费的&#xff08;1分钱1次调用&#xff0c;不愿付费自行折腾…

如何为 SEO 进行关键字研究

什么是关键词研究&#xff1f; 关键字研究是查找和分析理想网站访问者输入搜索引擎的关键字的过程。这使您能够在内容策略中定位最有效的关键字。 关键字是人们用来在搜索引擎中查找信息或产品的单词或短语。例如&#xff0c;如果您想为您的小狗购买食物&#xff0c;您可以在…

【DevOps-08-4】Jenkins实现自定义镜像并推送到Harbor

一、简要描述 打开Jenkins管理后台,进入项目详情在构建->增加构建步骤->执行shell添加编写构建执行shell脚本更改Springboot java项目源码版本,并提交到Gitlab登录到Gitlab管理后台,新建一个v3.0的tag到Jenkins管理后台,对项目执行构建构建记录详情,查看构建日志在宿…

浏览器网页内嵌Qt-C++音视频播放器的实现,支持软硬解码,支持音频,支持录像截图,支持多路播放等,提供源码工程下载

一.前言 在浏览器中实现播放RTSP实时视频流&#xff0c;⼤体上有如下⼏个⽅案&#xff1a; ⽅案一&#xff1a;浏览器插件⽅案 ActiveX、NPAPI、PPAPI ActiveX插件适用于IE浏览器&#xff0c;NPAPI与PPAPI插件适用于谷歌浏览器&#xff0c;不过这些插件都已经不被浏览器所支持…

PulsarServerException

orq.apache .pulsar .broker .PulsarServerException:the broker do not have external listener 这个异常通常表示Pulsar Broker没有为外部客户端配置外部监听器。在Pulsar中&#xff0c;外部监听器用于与Pulsar集群之外的客户端进行通信&#xff0c;例如在公共网络上的生产者…

【设计模式-06】Observer观察者模式

简要说明 事件处理模型 场景示例&#xff1a;小朋友睡醒了哭&#xff0c;饿&#xff01; 一、v1版本(披着面向对象的外衣的面向过程) /*** description: 观察者模式-v1版本(披着面向对象的外衣的面向过程)* author: flygo* time: 2022/7/18 16:57*/ public class ObserverMain…

软件测试要学习的基础知识——白盒测试

白盒测试是通过检查软件内部的逻辑结构&#xff0c;对软件中的逻辑路径进行覆盖测试&#xff0c;以确定实际运行状态与预期状态是否一致。 白盒测试又被称为&#xff1a; 透明盒测试 结构化测试 逻辑驱动测试 基于代码的测试 白盒测试的常用技术分类 一、静态分析&#x…

计算机三级(网络技术)一综合题(配置题)

常考题型 ip route ip route 0.0.0.0 0.0.0.0 <下-跳路由器P地址> Ip route 目标网段 掩码 <下一跳路由器IP地址> bandwidth bandwidth 带宽 单位&#xff1a;kbps 1Gbps1000Mbps1000000kbps crc CrC 32/16 默认32 ip address ip address ip地址 子…