首页 > 其他分享 >刷题笔记:P4452 [差分]

刷题笔记:P4452 [差分]

时间:2023-05-17 17:25:12浏览次数:60  
标签:P4452 int sum 差分 负数 数组 include 刷题

题目传送门:https://www.luogu.com.cn/problem/P4552

一道非常巧妙的差分。

我们先来讲一下样例:
原数组:1 1 2 2
差分后:1 0 1 0
这时,我们发现,若满足数组中所有数都相等, 则必须将差分数组除第一位以外的数都变成0

我们怎么用最小的次数将差分数组变成零呢?这个样例不算明显,我们再造一个:
input : 1 4 2 5
差分: 1 3 -2 3

差分数组出现了负数,我们知道差分处理区间加法是将left+1,right的下一位-1,显然每次操作需要将正数-1,负数+1,显然需要尽可能将正数和负数放在一个操作中处理。

那么到这里,第一问求最小次数就已经解决了,形式化来讲,若设差分数组为c,则答案为:
$ max(\sum_{i = 2}^{n}[c[i]>0] ,\sum_{i=2}^{n}abs([[c[i]<0]))$


再看第二问

在保证最少次数的前提下,最终得到的数列有多少种。

首先,因为要保证最小次数,我们必须要将正数和负数配对消的部分消完才行。

显然将正数负数配对部分消完后,差分数组除了第一位至多还剩下一个数不为零,我们把这个数定义为\(k\),则满足:
\(k=\left| \sum_{i = 2}^{n}[c[i]>0] -\sum_{i=2}^{n}abs([[c[i]<0]) \right|\)

我们发现改变差分数组第一个数(即数组第一个数)不影响结果,所以求可能性要从这里入手。

考虑如何消掉最后剩下的\(k\)
首先明确,消除\(k\)可以和自己消,也可以和\(a[i]\)消。类似于递归,每一次都可以选择和自己或者\(a[1]\)消,显然只有改变了\(a[1]\)才改变了答案,最后产生\(k+1\)种答案(+1是因为可以不和1消)

到这里,代码已经很明确了:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define N 10000010
#define int long long
using namespace std;
int n;
int h[N];
int c[N];
int sum1=0,sum2=0;
signed main()
{
    scanf("%lld",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&h[i]);
        c[i] = h[i] - h[i-1];
    }
    for(int i=2;i<=n;i++)
    {
        if(c[i] > 0) sum1+=c[i];
        else sum2+=abs(c[i]);
    }
    cout<<max(sum1,sum2)<<endl<<abs(sum1-sum2)+1<<endl;
    return 0;
}

标签:P4452,int,sum,差分,负数,数组,include,刷题
From: https://www.cnblogs.com/SXqwq/p/17409401.html

相关文章

  • BP神经网络的数据分类预测和故障信号诊断分类matlab代码 ,直接运行出数据分类结果和
    BP神经网络的数据分类预测和故障信号诊断分类matlab代码,直接运行出数据分类结果和误差分布,注释详细易读懂,可直接套数据运行。ID:62500634821932829......
  • 算法刷题系列之移除元素:快慢指针技巧
    题目+日期移除元素2023年5月14日17点50分基础知识暴力解法这个题目暴力的解法就是两层for循环,一个for循环遍历数组元素,第二个for循环更新数组。双指针法(快慢指针法)通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。定义快慢指针快指针:寻找新数组的元......
  • pwn刷题笔记
    jarvisoj_level2(ret2text)checksec检查保护机制,开启了NX。vulnerable_function函数处存在栈溢出漏洞:buf只能存放0x88个字节,但可以读入0x100个字节。system函数plt地址:0x8048320ida查看字串,“/bin/sh”地址:0x804A024构造payload#!/usr/bin/envpython3frompwnimport*io......
  • MISC刷题心得 与百度,谷歌,github语法总结
    MISC介绍:MISC,中文即杂项,包括隐写,数据还原,脑洞、社会工程、压缩包解密、流量分析取证、与信息安全相关的大数据等。竞赛过程中解MISC时会涉及到各种脑洞,各种花式技巧,主要考察选手的快速理解、学习能力以及日常知识积累的广度、深度。misc几种常见格式文件头:png:89504E47jpg:FFD......
  • OJ刷题之旅
    题目描述wzazzy先将天上n个星星排成一排,起初它们都是暗的。他将挥动n次魔法棒,第i次挥动会将编号为i的正整数倍的星星的亮暗反转,即亮的星星转暗,暗的星星转亮。wzazzy想问,最终会有多少个星星依旧闪亮在天空。输入一个整数n,含义请见题目描述。1<=n<=1e18输出一个整数ans,即n次操......
  • LeetCode 刷题 —— 辅助栈
     42. 接雨水classSolution{publicinttrap(int[]height){intres=0;Stack<Integer>leftWallStack=newStack();intlen=height.length;leftWallStack.push(0);for(inti=1;i<len;i++){......
  • 【华为HCIP | 高级网络工程师】刷题日记(5)
    文章目录每日刷题30道1、已知路由器R1存在Loopback0且地址为1.1.1.1/32,在使能OSPF并引入直连路由时会把该环回口引入。那么以下哪一项的配置能够实现在引入直连路由时,Loopback0不会被引入,并能够保证其他直连路由引入到OSPF内?2、在MA网络中的两台DRother路由器R1和R2建立邻居关系,那......
  • 【华为HCIP | 高级网络工程师】刷题日记(4)
    文章目录每日刷题30道1、在OSPF中部署Filter-Policy时,Filter-Policy会修改该OSPF的LSDB。2、如图所示,R1和R2已在BFD中配置了本端发送时间间隔和本端接收时间间隔及本端的BFD检测倍数。现R1和R2采用异步模式检测,那么R1实际检测时间是多少?3、USG防火墙上存在多个默认安全区域,其中Unt......
  • 文件包含刷题
    web81if(isset($_GET['file'])){$file=$_GET['file'];$file=str_replace("php","???",$file);$file=str_replace("data","???",$file);$file=str_replace(":",&q......
  • R语言用局部加权回归(Lowess)对logistic逻辑回归诊断和残差分析|附代码数据
    全文链接:http://tecdat.cn/?p=22328最近我们被客户要求撰写关于局部加权回归的研究报告,包括一些图形和统计输出。目前,回归诊断不仅用于一般线性模型的诊断,还被逐步推广应用于广义线性模型领域(如用于logistic回归模型),但由于一般线性模型与广义线性模型在残差分布的假定等方面有所......