首页 > 其他分享 >洛谷 P4552 [Poetize6] IncDec Sequence(差分)

洛谷 P4552 [Poetize6] IncDec Sequence(差分)

时间:2022-11-30 20:24:44浏览次数:71  
标签:洛谷 Sequence int 一步步 P4552 差分 负数 操作 正数

题目分析

直接贴一个洛谷上的题解,真的秀,讲的又清楚又好

要使得序列的数全部相等,其实就是让他们之间的差全为0,也就是差分序列的除了第一项每一项都是0,为什么除了第一项呢,因为b[1]=a[1]-a[0],而a[1]是开头的数
我们把问题转化成了让差分序列除第一项全等于0之后,继续思考

由于题目要求最少的步骤,我们可以考虑,如果差分序列里有一个正数和一个负数(出现的顺序无所谓),那么我们优先对这个正数和负数进行操作,为什么呢?因为我们有以下两个公式
如果a[l,r]+1,则b[l]+1,b[r+1]-1
如果a[l,r]-1,则b[l]-1,b[r+1]+1
正数-1,负数+1,这样相当于一步里作用了两步,比让正数一个个-1和让负数一个个+1快多了
那么我们可以进行多少种这样的操作呢?
我们可以令差分序列里正数绝对值的总和为p,负数绝对值总和为q
可以进行这样一步顶两步的操作就是min(p,q),因为这种操作正数负数是一一配对的,当少的那个先用完了,剩下的没有可以配对的了,只能一步步减或一步步加。
所以我们总共要进行的操作就为min(p,q)+abs(p-q),也就是max(p,q)

第一问完成,看第二问
保证最少次数的前提下,最终得到的数列有多少种?
得到的数列有多少种,其实就是问的b[1]可以有多少种
我们上述所有操作是与b[1]无关的,因为我们的目标是让除了b[1]以外的项变0,所以我们上述的操作没有考虑到b[1],b[1]怎么变,与我们求出的最小步骤无关
那么,我们怎么知道b[1]有几种呢?很简单,其实就是看看有几种一步步减或一步步加的操作数,因为我们一步步加的时候(假设我们现在的操作对象下标为i),可以这样操作,b[1]-1,b[i]+1一步步减的时候可以这样操作,b[1]+1,b[i]-1(注意,一个差分序列里一步步操作的时候只可能一步步加或一步步减,不可能一步步加和一步步减同时存在)
所以说,有几步一步步的操作就有几种情况+1,为什么+1呢,因为这个b[1]本身就有一个值啊!就算你不对他进行任何操作,它自己也有一种情况。
一加一减(也就是我们所说的一步顶两步的操作)操作数为min(p,q)
那么一步步的操作数就为max(p,q)-min(p,q)=abs(p,q)

参考代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
long long a[N], d[N], p, q;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	int n;
	cin >> n;
	for (int i = 1; i <= n; i ++ )
	{
		cin >> a[i];
		d[i] += a[i];
		d[i + 1] -= a[i];
	}
	for (int i = 2; i <= n; i ++ )
	{
		if (d[i] > 0) p += d[i];
		else if (d[i] < 0) q -= d[i];
	}
	// cout << min(p - q) + abs(p - q) << endl << abs(p - q) + 1 << endl;
	cout << max(p, q) <<endl << abs(p - q) + 1 << endl;
	return 0;
}

标签:洛谷,Sequence,int,一步步,P4552,差分,负数,操作,正数
From: https://www.cnblogs.com/Panmaru/p/16939594.html

相关文章

  • 洛谷 P1387 最大正方形(前缀和,二分)
    题目分析当一个边长为x的正方形不包含0时,这个正方形内的二维前缀和为x*x,题目想求满足条件的最大的正方形的边长假如最大的正方形的边长为ans,那么凡是边长大于ans的正方形......
  • 洛谷 P1205 [USACO1.2] 方块转换 Transformations
    [USACO1.2]方块转换Transformations题目描述一块\(n\timesn\)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转......
  • 300. Longest Increasing Subsequence
    Givenanintegerarray nums,return thelengthofthelongest strictlyincreasing subsequence. Example1:Input:nums=[10,9,2,5,3,7,101,18]Output:4......
  • 洛谷-P5541 Sleepy Cow Herding S
    SleepyCowHerdingSSleepyCowSorting的升级版,从\(3\)头牛变成\(n\)的情况分类讨论+双指针先把答案本就连续的特判丢掉最大值最大值就尽量把每个空位......
  • BurpSuite使用指南-使用Burp Sequencer
    BurpSequencerBurpSequencer作为BurpSuite中一款用于检测数据样本随机性质量的工具,通常用于检测访问令牌是否可预测、密码重置令牌是否可预测等场景,通过Sequencer的数据......
  • 『题解』UVA 10534 Wavio Sequence
    题目传送门题意\(Wavio\)是整数序列,有如下特点:它的长度总为奇数,即\(2n+1\);前\(n+1\)个数构成一个严格的上升序列,后\(n+1\)个数构成一个严格下降的序列;任意......
  • 洛谷P2014 [CTSC1997] 选课
    sloj P2006.「树上背包」选课题目描述在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总......
  • 洛谷P2015 二叉苹果树
    slojP10153.「一本通5.2例1」二叉苹果树P2015二叉苹果树题目描述有一棵苹果树,如果树枝有分叉,一定是分二叉(就是说没有只有一个儿子的结点)这棵树共有N个结点(叶子......
  • 洛谷 P4018 Roy&October之取石子
    洛谷P4018Roy&October之取石子题意:\(n\)个石头,每次取\(p^k\)个石子(\(p\)是质数,\(k\in\N\)),取完最后一个的人获胜,问谁有必胜策略。只能说,MO题真的猛!结论:\(n\bmod......
  • 洛谷P1090 Java
    [NOIP2004提高组]合并果子/[USACO06NOV]FenceRepairG题目描述在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的......