【算法日记】 最大战力值

问题描述

疫情使得人们线下社交隔离,进而刺激了宅娱乐经济,令手机游戏市场份额再次创新纪录。一款手机游戏一般有很多角色,每个角色都可以设定一个战力值。为了平衡每个角色的能力,提升玩家的游戏体验,游戏策划往往会对角色的战力值通过一些规则进行限制。

在某款手游里共有 n 个角色。这些角色从 0n-1 进行编号排成一列。角色的战力值按照以下的规则进行限定:

  1. 第一个角色的初始战力值为 0
  2. 每个角色的战力值是一个非负的整数
  3. 相邻角色的战力值差距不能超过 1(之间的差值可能是 0+1-1

在上边规则的基础上会再额外对其中的一些角色增加一些限制,设定最大战力值。这些限制会以若干数对的形式给出,每一个数对定义如下,limit[i] = [index, maxPower]index != 0i < n - 1)表示编号为 index 的角色的最大战力值不能超过 maxPowermaxPower 为一个非负整数)。由于第一个角色有了初始的战力值,所以不会再对编号为 0 的角色进行战力值限定。

请根据以上规则,计算出单个角色能达到的最大战力值。

输入格式

第一行为两个整数 n,m (2<=n<=10^6, 1<=m<=10^5),其中 n 为游戏中角色的总个数,m 为限制了最大战力值的角色数。
后边的 m 行,每一行都有两个整数 index, maxPower (index != 0 且 index < n - 1),index 是角色编号,index != 0 即不会对编号为 0 的角色进行战力值的限定,maxPower 是该角色被限定的最大战力值。

输出格式

输出1个整数,表示单个角色能达到的最大战力值。

输入样例1

3 2
1 3
2 2

说明:
第1行表示游戏中有3个角色,对其中2个角色限制了最大战力值。
接下来的2行是具体的限制,对编号为1的角色限制了最大战力值为3,对编号为2的角色限制了最大战力值为2。

输出样例1

2

说明:
[0,1,2] 是满足规则约束的一个战力值设定方案,相邻角色的战力值之差不超过 1,最大战力值是最后一个角色,最大战力值为 2

输入样例2

5 3
1 1
2 3
4 3

说明:
第1行表示游戏中有5个角色,对其中3个角色限制了最大战力值。
接下来的2行是具体的限制,对编号为1的角色限制了最大战力值为1,对编号为2的角色限制了最大战力值为3,对编号为4的角色限制了最大战力值为3。

输出样例2

3

说明:
[0,1,2,3,3] 是满足规则约束的一个战力值设定方案,相邻角色的战力值之差不超过 1,最大战力值是最后两个角色,最大战力值为 3

数据范围

2 ≤ n ≤ 1 0 6 1 ≤ m ≤ 1 0 5 2 \leq n \leq 10^6 \\ 1 \leq m \leq 10^5 2n1061m105

思路

去掉题目描述的角色外壳剖析内在,实质上就是一道求前后关联数据问题求解。思路是这样,正向走一遍,再返回来走一遍。第一遍走的时候,我们定义一个power数组,限制处接受样例给定的最大战力,power[0]为0,其余为INT_MAX,在第一遍正向即从左往右遍历时,转移方程为power[i]=min(power[i-1] + 1, power[i]),为什么会使用min()?因为要保证符合限制,也就是power[i]为非INT_MAX时,该下标的实际战力值要尽可能地小地来通过限制条件。那么,使用该转移方程跑一遍,我们只能得到不断上升地战力值,但是遇到限制条件min()会毫不犹豫地选择限制条件,或者是合法的通过有限制的下标,这时,我们需要反向再次遍历。反向遍历就是正向的逆过程,这里先上转移方程,先脑内构思一下power[i] = min(power[i], power[i + 1] + 1)。在这个过程内,如果某段在两限制点间的战力值的斜率为1或者0,那么不会对这段战力值改变,但是遇到了限制条件,方程就会消除正向遍历产生的断层。最后,我们就得到了尽可能大地而又合法地战力数组了。

源码

CPP

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int solution(int n, int m, vector<vector<int>>& array) {// Edit your code herevector<int> power(n, INT_MAX);//更新限制条件for (int i = 0; i < m; i++) {int index = array[i][0];int maxPower = array[i][1];power[index] = min(power[index], maxPower);}//初始化第一个角色的战力值power[0] = 0;//计算每个角色的最大战力值for (int i = 1; i < n; i++) {//计算当前角色的最大战力值power[i] = min(power[i], power[i - 1] + 1);}//再次正向传播限制条件for (int i = n - 2; i >= 0; i--) {power[i] = min(power[i], power[i + 1] + 1);}//返回最大的战力值int maxPower = 0;for (int p : power) {maxPower = max(maxPower, p);}return maxPower;
}int main() {// Add your test cases herevector<vector<int>> sample1 = {{1, 3}, {2, 2}};vector<vector<int>> sample2 = {{1, 1}, {2, 3}, {4, 3}};cout << solution(3, 2, sample1) << endl;    //output:2cout << solution(5, 3, sample2) << endl;    //output:3return 0;
}

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

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

相关文章

学习笔记——交换——STP(生成树)工作原理

三、工作原理 STP的基本原理是在一个有二层环路的网络中&#xff0c;交换机通过运行STP&#xff0c;自动生成一个没有环路的网络拓扑。这个无环网络拓扑也叫做STP树(STP Tree)&#xff0c;树节点为某些交换机&#xff0c;树枝为某些链路。当网络拓扑发生变化时&#xff0c;STP…

js简单基础笔记

一 . js特点 1. Js是一门解释型语言&#xff0c;不用编译&#xff0c;而是直接执行 2. js是一门动态语言&#xff0c;其中的任何内容都是不确定的 3. 语法结构和Java&#xff0c;c都很像 4. ​ js是一门面向对象的语言 5.js严格区分大小写 二 . js使用 1…

linux笔记(yum本地源仓库搭建)

一、准备工作 安装必要的软件包 在大多数 Linux 发行版中&#xff0c;Yum 已经默认安装。如果系统中没有安装&#xff0c;可以根据发行版的包管理器进行安装。 准备本地源文件 可以是光盘镜像&#xff08;如果是从光盘安装系统&#xff09;&#xff0c;或者是已经下载好的系…

TiDB 新版本:更稳、更快、更好的数据库体验

作者&#xff1a; TiDB社区小助手 原文来源&#xff1a; https://tidb.net/blog/2d33d7db 本文内容出自&#xff1a;PingCAP 高级顾问 蓝功儒老师 在 9 月 21 日 TiDB 新版本 Meetup 中&#xff0c;PingCAP 高级顾问蓝功儒老师为我们带来了关于 TiDB 新版本的深入分享。TiD…

基于LORA的一主多从监测系统_数据发送

数据上传我这里使用了问询的方式&#xff0c;这样的好处一是可以用来统计节点的存活状态&#xff0c;二是可以避免冲突&#xff0c;主节点通过向从节点发送问询帧&#xff0c;从节点收到问询帧后开始向主节点发送数据&#xff0c;同时我们也可以加入不同的帧类型&#xff0c;比…

golang的net包

https://learnku.com/docs/the-way-to-go/151-tcp-server/3703 https://www.bilibili.com/video/BV1JP4y1s7rS net包介绍 net包的底层实现依赖于操作系统的网络API。net包提供了跨平台的网络编程接口&#xff0c;使得开发者可以在不同的操作系统上进行网络编程而无需担心底层实…

在数据库中,`SELECT`, `FROM`, `JOIN`, `ON`, 和 `WHERE`各自的作用

在数据库中&#xff0c;SELECT, FROM, JOIN, ON, 和 WHERE 关键字是 SQL 查询语句中用于检索数据的重要部分。它们各自在查询中扮演着不同的角色&#xff0c;但通常一起使用来构造复杂的数据检索操作。下面是它们各自的作用&#xff1a; 1. **SELECT**: - SELECT 关键字用于指…

通用序列化和反序列化实现思路

本文简单的记录一下采用模板来实现序列化与反序列的思路&#xff0c; 同时采用C20标准的concept和requires来简化模板函数的选择。 首先了解一下自定义类支持序列化的两种方式&#xff1a; 一、序列化自定义类型&#xff08;侵入式&#xff09; struct Test {std::string na…

4.three.js网格模型介绍和绘制基础点、线、面

4.three.js网格模型介绍和绘制基础点、线、面 1、计算机中3D世界的组成 在计算机世界里&#xff0c;3D世界是由点组成&#xff0c;两个点能够组成一条直线&#xff0c;三个不在一条直线上的点就能够组成一个三角形面&#xff0c;无数三角形面就能够组成各种形状的物体&#x…

Linux基础项目开发day05:量产工具——页面系统

文章目录 一、数据结构抽象page_manager.h 二、页面管理器page_manager.c 三、单元测试1、main.page.c2、page_test.c3、Makefile修改3.1、unittest中的Makefile3.2、page中的Makefile 四、上机实验 前言 前面实现了显示、输入、文字、UI系统&#xff0c;现在我们就来实现页面的…

Axure树形菜单展开与折叠

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;Axure树形菜单展开与折叠 主要内容&#xff1a;树形菜单制作——层级关系——隐藏与显示——值的变化——多层交互 应用场景&#xff1a;关系树、菜…

Python学习的自我理解和想法(15)

学的是b站的课程&#xff08;千锋教育&#xff09;&#xff0c;跟老师写程序&#xff0c;不是自创的代码&#xff01; 今天是学Python的第15天&#xff0c;从今天开始&#xff0c;每天一到两个常用模块&#xff0c;更完恢复到原来的&#xff0c;开学了&#xff0c;时间不多&am…

滚雪球学Redis[9.1讲]:Redis的常见问题与最佳实践

全文目录&#xff1a; 前言1. Redis的常见问题排查常见错误信息与解决方案性能瓶颈的识别与处理数据一致性问题的排查 2. Redis的最佳实践Redis使用中的通用原则典型业务场景中的最佳实践如何避免Redis中的反模式 小结下期预告 前言 在上一章【第八章&#xff1a;Redis的扩展与…

Java 直接获取 pom.xml 配置的属性值

Java 直接获取 pom.xml 配置的属性值 1.需求描述2.代码示例3.结果演示 系统&#xff1a;Win10 JDK&#xff1a;1.8.0_351 IDEA&#xff1a;2022.3.3 1.需求描述 在开发一个 SpringBoot 项目的时候&#xff0c;需要从 pom.xml 中获取配置的 artifactId&#xff0c;name&#xf…

vscode配置ssh远程连接服务器

注意&#xff1a;重启软件或重启电脑&#xff0c;解决很多问题 一. vscode配置ssh vscode通过ssh连接服务器&#xff08;吐血总结&#xff09;_vscode ssh-CSDN博客 二. VScode无法远程连接主机问题 VSCode远程连接服务器报错&#xff1a;Could not establish connection to…

paddleOcr记录

情况1&#xff1a;默认不需要标注电能表样本、训练电能表OCR模型&#xff0c;需调用PaddleOCR出识别字符&#xff0c;对识别信息进行提取 01 – >> test01.py 情况2&#xff1a;需要从无到有标注OCR样本&#xff0c;或已有样本及标签文件&#xff0c;需训练电能表OCR模型…

Redis技术指南:数据类型、事务处理与过期键管理

什么是redis&#xff1f; Redis&#xff08;Remote Dictionary Server&#xff0c;远程字典服务&#xff09;是一个开源的、基于键值对的内存数据结构存储系统&#xff0c;可以用作数据库、缓存和消息中间件。Redis支持多种数据结构&#xff0c;如字符串&#xff08;strings&am…

HCIP-HarmonyOS Application Developer 习题(十六)

&#xff08;判断&#xff09;1、HiLink通过分布式软总线的方式连接所有设备&#xff0c;强能力设备可对弱能力设备进行设备虚拟化&#xff0c;将弱设备当做本机设备直接调用。 答案&#xff1a;错误 分析&#xff1a;HiLink 主要针对的是应用开发者与第三方设备开发者&#xf…

K14836 加密通话(call)

题目描述 杰克船长担心船上存在其他海盗船的间谍&#xff0c;于是和他的心腹们设计了一种加密通话方式&#xff0c;其中对数字加密的方式是这样的&#xff1a;如果这个数字是1222334111&#xff0c;可看做1个1,3个2,2个3,1个4,3个1&#xff0c;那么会被加密,1132231431&#x…

力扣 中等 143.重排链表

文章目录 题目介绍题解 题目介绍 题解 class Solution {public void reorderList(ListNode head) {ListNode mid middleNode(head);ListNode head2 reverseList(mid);while (head2.next ! null) {ListNode nxt head.next;ListNode nxt2 head2.next;head.next head2;head2.…