POJ3263. Tallest Cow题解(c++ 前缀和)

news2024/9/25 3:20:22

POJ3263. Tallest Cow

传送门:Tallest Cow


题目:

有N头牛站成一行。两头作能够相支看见,当且仅当它们中间的牛身高都比它们矮。现在,我们只知道其中最高的牛是第P头,它的身高是H,不知道剩余N-1头牛的身高。但是,我们还她道对关系,每对关系都指明了某两头牛A;和B;可以相互看见。求每头牛的身高最大可能是多少。1≤ N,M ≤ 10*,1≤H≤10。

N:牛的总数,P:身高最高的牛,H:身高最高的牛的身高,M:关系的对数

我们定义一个C数组,初始全部元素为0。

假设告诉了我们 i 与 j 的关系(1<=i<j<=N),因此我们可以知道,在i与j之间的全部位置,即 开区间(i,j)之间的所有的牛的身高都至少比 i和j 矮1,因此,我们可以在每组输入的时候(i,j),对i+1和j-1之间全部的元素都减去1,即C[i+1]-=1…C[j-1]-=1,因为中间位置的牛的身高一定且至少比两边的牛的身高矮1。

再加上 p牛的身高一定是最高的,并且我们已知这个H,所以 C[p]一定等于零,因为从上面的分析可得,我们的C数组表示的是一个变化量,因此对于每一对(i,j)之间的元素,C[x](i<x<j)都执行减1操作,则最后利用 H+C[x] 就可以得到每一头牛的至少的最高高度。

我们如果对于i,j中的每一个元素都进行-1,则这一定是一个二重循环,时间复杂度达到了O(nm),因此这个算法并不算优秀,但是它的确是可以做出来的


前缀和思想

我们有必要对(i,j)中的每一个 元素都执行 -1的操作吗??

  • 我们只需要对C[i+1]-=1, C[j]+=1 ,就可以了。

为什么呢?我们现在只需要对两个位置的元素进行操作,如果真的可以的话,这个算法将会将到O(n+m)的复杂度,基本适用于所有的竞赛测试。

  1. 建立一个数组D,来表示这两个位置的操作:C[i+1]-=1, C[j]+=1,这句话表示的含义是:“身高减少状态从i+1开始,一直延续到 j-1,到 j 结束,所以我们可以把这一段看作一个状态,根据这个状态,我们就可以用前缀和求出这些位置的值,C就等于D的前缀和。
  2. 前缀和公式:C[i]=C[i-1]+D[i]
    在这里插入图片描述

意义:把一段区间的操作转换为对左右两个端点的操作,再通过前缀和逆推出原状态。

代码示例

#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <set>
using namespace std;
int n,p,h,m;
int presum[10005],res[10005];
set<pair<int,int>> s;
int main()
{
    cin>>n>>p>>h>>m; //第p头牛的身高最高
    for (int i=1;i<=m;i++)
    {
        int a,b;
        cin>>a>>b;
        //a始终表示的是左端点,b始终是右端点
        if (a>b) swap(a,b);
        auto p=make_pair(a,b);
        //这一条记录已经被记录了
        if (s.count(p)) continue;
        //对区间左右端点操作
        presum[a+1]-=1;
        presum[b]+=1;
        //加入set,便于去重
        s.insert(p);
    }
    for (int i=1;i<=n;i++)
    {
        //前缀和逆推原状态
        res[i]=res[i-1]+presum[i];
        printf("%d ",h+res[i]);
    }
	return 0;
}

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

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

相关文章

大数据之Kafka高级知识点

文章目录前言一、分片和副本机制&#xff08;一&#xff09;分片机制&#xff08;二&#xff09;副本二、Kafka如何保证数据不丢失&#xff08;一&#xff09;Producer生产者&#xff08;二&#xff09;Broker&#xff08;三&#xff09;Consumer消费者三、消息存储和查询机制总…

重新设计 TCP 协议

看一段关于 TCP 协议的历史讨论&#xff0c;源自&#xff1a;The design philosophy of the DARPA internet protocols 读这段文字时&#xff0c;你可能觉得这不是在谈 TCP&#xff0c;而是在创造一个新协议&#xff0c;但事实上这就是 TCP 在被创造过程中真实的纠结。 现在来…

Java知识点细节简易汇总——(6)面向对象编程(中级部分)

一、IDE快捷键 删除当前行, 默认是 ctrl Y 自己配置 ctrl d复制当前行, 自己配置 ctrl alt 向下光标补全代码 alt /添加注释和取消注释 ctrl / 【第一次是添加注释&#xff0c;第二次是取消注释】导入该行需要的类 先配置 auto import , 然后使用 altenter 即可快速格式化…

Day867.事务隔离 -MySQL实战

事务隔离 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于事务隔离的内容。 提到事务&#xff0c;肯定不陌生&#xff0c;和数据库打交道的时候&#xff0c;总是会用到事务。 最经典的例子就是转账&#xff0c;你要给朋友小王转 100 块钱&#xff0c;而此时你的银行…

[前端笔记——CSS] 10.层叠与继承、选择器

[前端笔记——CSS] 10.层叠与继承、选择器1.层叠与继承1.1 冲突规则1.2 继承1.3 层叠1.4 CSS位置的影响2.选择器2.1 选择器是什么&#xff1f;2.2 选择器列表2.3 选择器的种类类型、类和 ID 选择器标签属性选择器伪类与伪元素运算符选择器参考表1.层叠与继承 1.1 冲突规则 CS…

一起自学SLAM算法:8.1 Gmapping算法

连载文章&#xff0c;长期更新&#xff0c;欢迎关注&#xff1a; 下面将从原理分析、源码解读和安装与运行这3个方面展开讲解Gmapping 算法。 8.1.1 Gmapping原理分析 首先要知道&#xff0c;Gmapping是一种基于粒子滤波的算法。在7.7.2节中已经提到过用RBPF&#xff08;Rao-…

linux系统中使用QT实现APP开发的基本方法

大家好&#xff0c;今天主要和大家分享一下&#xff0c;如何使用QT进行APP的主界面开发的方法。 目录 第一&#xff1a;APP界面开发基本简介 第二&#xff1a;滑动界面实现 第三&#xff1a;APP界面开发实现 第四&#xff1a;APP主界面测试 第一&#xff1a;APP界面开发基本…

ARP渗透与攻防(一)之ARP原理

ARP原理 前言 ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗&#xff0c;能够在网络中产生大量的ARP通信量使网络阻塞&#xff0c;攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目&#xff0c;造成网络中断或中间人攻击。ARP攻击主要是存在…

CSS3基础内容

目录 CSS基本样式 选择器分类 标签选择器 类选择器 利用类选择器画三个盒子 多类名 id选择器 id选择器和类选择器的区别 通配符选择器 CSS字体属性 字体粗细font-weight 字体样式 CSS文本属性 CSS的引入方式 行内样式表&#xff08;行内式&#xff09; 内部样式表…

2023年集卡活动简记

文章目录支付宝总评&#xff1a;【强烈推荐】年味浓&#xff0c;必中奖&#xff0c;单倍金额不算少。只关注开奖可以除夕当天玩儿。集卡分1.88元难度&#xff1a;【非常低】必中奖时间投入&#xff1a;【较少】无需打开其他App&#xff0c;比较轻松。操作体验&#xff1a;【好】…

深度理解卷积神经网络

神经网络包括卷积层&#xff0c;池化层&#xff0c;全连接层。一个最简单的神经元结构&#xff0c;假如有三个输入&#xff0c;都对应一个权重参数&#xff0c;然后通过权重加起来&#xff0c;经过一个激活函数&#xff0c;最后输出y。CNN中独特的结构就是卷积层&#xff0c;就…

拓展:阿里巴巴中文站架构演进分析【部分】

文章目录前言阿里巴巴中文站架构发展历程阿里巴巴第五代架构数据架构的复杂前言 由学习整理而来&#xff0c;并非有意抄袭。如果有冒犯行为&#xff0c;请及时联系作者进行处理&#xff01; 阿里巴巴中文站架构发展历程 时间关键技术1999第一代网站架构Perl&#xff0c;CGl&…

【实操案例八】元组、集合操作 实例代码及运行效果图!

任务一&#xff1a;我的咖啡馆你做主 方法一&#xff1a;使用列表 # 任务一&#xff1a;我的咖啡馆你做主 # 方法一&#xff1a;使用列表lst[蓝山,卡布奇诺,拿铁,皇家咖啡,女王咖啡,美丽与哀愁]for i in lst:print(lst.index(i)1,.,i,end\t) print()while True:chice int(in…

SpringCloud+Ribbon 报错:java.net.unknownhostexception:XXX

SpringCloudRibbon 报错&#xff1a;java.net.unknownhostexception:XXX 问题分析&#xff1a; 网上很多的说法是依赖冲突导致&#xff0c;原因是什么呢&#xff1a;如果你的org.springframework.cloud:spring-cloud-starter-netflix-eureka-client 依赖中包含了ribbon依赖&…

常用JVM配置参数简介

既然学习JVM&#xff0c;阅读GC日志是处理Java虚拟机内存问题的基础技能&#xff0c;它只是一些人为确定的规则&#xff0c;没有太多技术含量。 既然如此&#xff0c;那么在IDE的控制台打印GC日志是必不可少的了。现在就告诉你怎么打印。 &#xff08;1&#xff09;如果你用的是…

Elasticsearch7.8.0版本高级查询—— 分页查询文档

目录一、初始化文档数据二、分页查询文档2.1、概述2.2、示例一、初始化文档数据 在 Postman 中&#xff0c;向 ES 服务器发 POST 请求 &#xff1a;http://localhost:9200/user/_doc/1&#xff0c;请求体内容为&#xff1a; { "name":"zhangsan", "ag…

数据分析-深度学习 Pytorch Day8

一。什么是循环神经网络&#xff1a;循环神经网络&#xff08;Rerrent Neural Network, RNN&#xff09;&#xff0c;历史啊&#xff0c;谁发明的都不重要&#xff0c;说了你也记不住&#xff0c;你只要记住RNN是神经网络的一种&#xff0c;类似的还有深度神经网络DNN&#xff…

广州周立功CanTest卡使用教程一

网上有不少Can采集平台,包括Ardunio,Can卡,也有不少人用Freescale自己DIY一个平台,这些都是相当不错,并且都有成熟的代码,这里介绍在汽车诊断软件领域普遍都会选择的Can卡使用。 大家是不是对这个节面非常熟悉,CAN-bus 通用测试软件是一个专门用来对所有的 ZLGCAN 系列板…

【Python】基于经典网络架构训练图像分类模型——图像识别模型与训练策略(2023年1月22日,大年初一,春节快乐,兔年大吉)

声明:仅学习使用~ 今天是大年初一,祝大家新年快乐!!! 这个练习使用的图片稍多,因此初次在PyCharm里面可能会需要一些时间。 (注释中包含遇到的一些错误以及修正,同时也含有一些输出,部分较长的输出以省略号的形式在注释里面展示了) 2023.1.22,大年初一,新年快乐…

LoadBalancer源码解析

文章目录一、背景二、总体流程三、源码解析1. lb拦截器配置2. LB拦截器实现3. LB执行前置处理4. 负载均衡5. LB执行http请求一、背景 Spring Cloud 2020版本以后&#xff0c;默认移除了对Netflix的依赖&#xff0c;其中就包括Ribbon&#xff0c;官方默认推荐使用Spring Cloud …