首页 > 其他分享 >洛谷题单指南-前缀和差分与离散化-P4552 [Poetize6] IncDec Sequence

洛谷题单指南-前缀和差分与离散化-P4552 [Poetize6] IncDec Sequence

时间:2024-08-01 14:50:15浏览次数:16  
标签:Sequence int 洛谷题 P4552 up down 负数 操作 正数

原题链接:https://www.luogu.com.cn/problem/P4552

题意解读:对一组数字序列,进行若干次区间+1或者-1操作,最终使得所有数字一样,计算最少的操作次数,以及能得到多少种不同序列。

解题思路:

要使得序列每一个数字都相同,则其差分除了第一项之外其余项都是0。

因此,问题转化为:给定一个差分数组a[],每次对两个数a[l],a[r+1]分别进行+1、-1操作(对于前缀和数组就是对[l,r]每个数都+1或-1),最终使得除a[1]之外都变成0,而a[1]的数值决定其前缀和数组有多少种不同的序列。

一共有如下几种可能的操作:

a[]中除a[1]外存在一正一负时:

  操作一:对正数-1,对负数+1,这样可以尽快将所有数变为0,保证操作次数最少

a[]中除a[1]外只有正数或者负数时:

  操作二:可以对a[1]+1或-1,对正数-1或对负数+1,该操作影响最终序列的种类

  操作三:可以对正数-1或对负数+1,对a[n+1]+1或-1

所以,对于一个差分数组a[],设除了a[1]所有正数之和为up,所有负数之和的绝对值为down

那么优先进行操作一,直到只剩下正数或者负数,操作次数为min(up, down)

接下来,只剩下正数或者负数,可以进行操作二或者操作三,任选其一即可,操作次数为abs(up - down)

总操作次数为:min(up, down) + abs(up - down)

可能得到的序列取决于进行操作二的次数,可以有0 ~ abs(up - down)次操作二,一共对应1 + abs(up - down)种序列。

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 100005;
int s[N], a[N];
int n;
long long up, down;

int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        cin >> s[i];
        a[i] = s[i] - s[i - 1];
    }

    for(int i = 2; i <= n; i++)
    {
        if(a[i] > 0) up += a[i];
        else if(a[i] < 0) down += abs(a[i]);
    }

    cout << min(up, down) + abs(up - down) << endl;
    cout << 1 + abs(up - down);

    return 0;
}

 

标签:Sequence,int,洛谷题,P4552,up,down,负数,操作,正数
From: https://www.cnblogs.com/jcwy/p/18336665

相关文章

  • 洛谷题单指南-前缀和差分与离散化-P2882 [USACO07MAR] Face The Right Way G
    原题链接:https://www.luogu.com.cn/problem/P2882题意解读:一个有F、B组成的序列,每次可以翻转k个连续子序列,翻转:F->B,B->F,计算最少翻转多少次可以将序列都变成F,并求相应的k。解题思路:为方便处理,设F为1,B为01、朴素做法枚举k:1~n  枚举序列,一旦遇到0,就将连续k个字符翻转,如果可......
  • Invertible Bracket Sequences
    看到这种类似的括号匹配的题目,一定要想到卡特兰数的证明过程呀(将(看成\(1\),)看成\(-1\),于是不难得出充分条件,虽然这道题目并不是直接这么给的,但是我看没人证明)剩下的看官方题解就好了,之所以可以删掉官方题解所说的\(x\),是因为接下来如果\(x\)是\(r_1\)的答案候选项的话,由于\(r_1>......
  • 洛谷题单指南-前缀和差分与离散化-P1083 [NOIP2012 提高组] 借教室
    原题链接:https://www.luogu.com.cn/problem/P1083题意解读:已知第i天有r[i]个教室可以供租借,有m个租借教室的订单,第i订单需要在第s[i]~t[i]天区间内租借d[i]个教室,计算是否全部订单都能满足,如果不满足要输出从第几个订单开始不满足。解题思路:1、朴素做法枚举1~m个订单,通过差分......
  • 洛谷题单指南-前缀和差分与离散化-P3406 海底高铁
    原题链接:https://www.luogu.com.cn/problem/P3406题意解读:1-n个城市共了n段路,第i段路不买卡票价a[i],买卡票价b[i](卡本身花费c[i]),给定一个路程顺序,计算最少的通行费用。解题思路:根据路程,计算每段路各走了多少次,然后对于每段路,计算买卡和不买卡两种花费,取较小的累加即可。如何......
  • 洛谷题单指南-前缀和差分与离散化-P3017 [USACO11MAR] Brownie Slicing G
    原题链接:https://www.luogu.com.cn/problem/P3017题意解读:将一个r*c的矩阵,横向切成a条,每一条纵向切除b块,计算每一块子矩阵之和的最小值最大是多少。解题思路:要计算最小值中最大的,直觉上可以采用二分,下面来分析单调性:给定一个子矩阵块之和的值,值越小可以划分的条数、块数就越多......
  • Bracket Sequences II
    原题链接题解一个合法的括号序列,满足长度为偶数前缀和处处不小于0左括号等于右括号数量code#include<bits/stdc++.h>#definelllonglong#definelowbit(x)((x)&(-x))usingnamespacestd;constllinf=1e18;constllmod=1e9+7;llqpow(lla,lln){......
  • 洛谷题单指南-前缀和差分与离散化-P2004 领地选择
    原题链接:https://www.luogu.com.cn/problem/P2004题意解读:在一个n*m的矩阵中,找到边长为c的正方形,使得正方形范围内的数之和最大,输出正方形的左上角坐标。解题思路:二维前缀和的简单应用第一步:计算二维前缀和第二步:枚举边长为c的正方形左上角,计算正方形区域的数之和,更新答案第......
  • 洛谷题单指南-前缀和差分与离散化-P1884 [USACO12FEB] Overplanting S
    原题链接:https://www.luogu.com.cn/problem/P1884题意解读:给定n个矩形的平面直角坐标系下左上角、右下角的坐标,计算这n个矩形能覆盖的的格子数。解题思路:直观上来看,此题是一个差分应用,针对二维差分数组,将n个矩形区域内每个格子的值加1,然后统计有多少个不为0的格子即可。但是!坐......
  • 论文阅读:Sequence to sequence learning for joint extraction of entities and relat
    用以解决重叠关系问题GGNNs模型GGNNs(门控图神经网络,GatedGraphNeuralNetworks)是一种处理图结构数据的神经网络模型。它是图神经网络(GNN)的一个变体,使用了类似于长短时记忆网络(LSTM)中的门控机制来更有效地处理图中的信息流。GGNNs的核心机制GGNNs的核心思想是通过在图结构中......
  • 洛谷题单指南-前缀和差分与离散化-P1496 火烧赤壁
    原题链接:https://www.luogu.com.cn/problem/P1496题意解读:给定n个区间[a,b),计算所有区间覆盖的总长度。解题思路:方法1、离散化先思考一种比较直观的思路:既然要计算多个区间覆盖的总长度,可以枚举每一个区间[a,b),通过一个桶数组来标记区间中所有的点f[x]=1,最终统计所有为1的......