首页 > 其他分享 >Luogu P4552 [Poetize6] IncDec Sequence 更好的题解

Luogu P4552 [Poetize6] IncDec Sequence 更好的题解

时间:2023-07-21 23:25:12浏览次数:39  
标签:std ... Sequence int 题解 sum long Luogu dis

原题链接

第一步对于学过差分的人应该不难想
定义差分数组 $dis \quad s.t. \quad dis[i] = a[i] - a[i-1] $
那么不难发现问题一只要让 \(dis[2] ... dis[n]\)中全部为 \(0\) 即可
区间\([l,r]\)加一操作在差分数组中意味着\(dis[l]=dis[l]+1,dis[r+1]=dis[r+1]-1\)
即在差分数组中每次选取\((x,y),dis[x]=dis[x]+1,dis[y]=dis[y]-1\)
注意这里\(x,y\)可以选取\(1...n+1\)
减一同理
最后要使\(dis[2] ... dis[n]\)全为0,首先在\(dis[2] ... dis[n]\)选取一个正数和一个负数是他们配对加一或减一,直到最后只剩下一个数,不难发现这个数就是\(dis[2] ... dis[n]\)中正数的和\(sum^+\)和负数的和的绝对值\(|sum^-|\)的差,让他与dis[1]或dis[n+1]配对即可

最后整理可得:\(min(sum^+,sum^-)+|sum^+-|sum^-||\),即\(max(sum^+,|sum^-|)\)就是第一小问答案

对于第二小问,不难注意答案序列的不同只和在第一小问中最后剩下的那个数\(k = sum^+-|sum^-|+1\)有关
我们这里不妨设\(k > 0\),那么它可以和1或n+1配对,这里两个操作就代表了原数组\(a[1,k-1]\)全部加一和原数组\(a[k,n]\)全部减一,也就产生了两种不同的序列
那么这两种操作进行的次数的和必然是\(k\),那么就产生了k+1中不同的选法(第一个操作进行\(0...k\)次)
对于\(k < 0\)的情况可以同样地进行讨论
那么第二问答案就是\(k+1=|sum^+-|sum^-||+1\)

//c++AC代码
#include <bits/stdc++.h>
using namespace std;

int n,a[(int)1e5+5],dis[(int)1e5+5];
long long sum_z,sum_f,rest;

int main()
{
	scanf("%d",&n);
	for(int i = 1;i <= n;++i)
	{
		scanf("%d",a+i);
	}
	for(int i = 1;i <= n;++i)
	{
		dis[i]=a[i]-a[i-1];
	}
	for(int i = 2;i <= n;++i)
	{
		if(dis[i] > 0)
			sum_z+=dis[i];
		else 
			sum_f+=dis[i];
	}
	rest=sum_z+sum_f;
	printf("%lld\n",max(sum_z,std::abs(sum_f)));
	printf("%lld",(long long)std::abs(sum_z-std::abs(sum_f))+1);
	return 0;
}

标签:std,...,Sequence,int,题解,sum,long,Luogu,dis
From: https://www.cnblogs.com/xxxxxxxb/p/17572586.html

相关文章

  • 2023 暑假集训模拟赛题解
    目录CSP模拟1CSP模拟2FSYOCSP模拟1来自学长的馈赠2.CSP模拟2F考虑\(x\)只能在\(a_1\oplusb_i\)里选,那么分别代入暴力检验即可.时间复杂度\(\tilde\Theta(n^2)\),可以通过.S考虑交换同色的部分一定不优,所以同色字符的相对位置一定是不变的.那么操作序列......
  • 幽灵乐团 题解
    幽灵乐团题目大意\(T\)组数据,每组数据给定\(A,B,C\),求:\[\prod_{i=1}^A\prod_{j=1}^B\prod_{k=1}^C\Big(\frac{\text{lcm}(i,j)}{\gcd(i,k)}\Big)^{f(type)}\bmodp\]其中,\(type\in\{0,1,2\}\),\(f(0)=1,f(1)=i\timesj\timesk,f(2)=\gcd(i,j,k)\)。思路分析神经污......
  • 【问题解决】docker版本v23.0后,构建Dockerfile中FROM私库镜像报错构建失败
    问题情况Docker版本在v23.0以后,只要Dockerfile中FROM的私库镜像不存在本地,就会报错:#我本地是v24.0.2版本Docker[root@localhostipd]#dockerbuild.-tharbor.xxx.com.cn/test/bap:2.7.1[+]Building0.6s(3/3)FINISHED......
  • P9352 题解
    problem&blog。HerryHuang的DP专题中最喜欢的一题,抢第一篇题解/fendou。关于题意:只有往猫那里扔路障,猫才会动,否则只会原地坐牢。猫如果要走动,是一下子走到最高点,而不是慢慢挪动。假设猫在\(u\)点。现在往\(u\)扔路障,猫会跑去最高点,然后他无法返回到\(u\)的其他子......
  • SP12304 题解
    原题链接|题解链接本篇题解为此题最较简单做法及最较少码量,并且码风优良,请放心阅读。题目简述当\(i\)的所有正因数和\(=\)\(n\)时,其中\(i\)的最小值。思路首先需要完成求一个数的所有正因数之和的函数\(f(n)\)。要求此函数可返回传入参数的所有正因数之和,那么......
  • 【补充】时间出错问题解决
    【补充】时间出错问题解决TIME_ZONE='Asia/Shanghai'和USE_TZ=False是Django项目设置中的两个相关选项用于指定项目的时区和是否使用时区。【一】TIME_ZONE='Asia/Shanghai'这个设置用于指定项目所在的时区。在这个例子中,时区被设置为'Asia/Shanghai'表示项目位于......
  • P4843题解
    P4843题解原题连接建模一到比较裸的有源汇上下界最小流。每条边必走一次,要求求出最小的流量。由于比较裸,这里当作上下界流的例题讲。什么是有源汇上下界最小流顾名思义,就是在最大流的基础上增加了边的最小经过流量,使得整个网络可行,并且找出最小流量的方案。一个比较朴实的......
  • 列队春游题解 O(n方)
    题目前言出生镇楼思路:打个暴力先#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;namespaceTestify{inlineintread(){intf(1),x(0);charch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-......
  • 【求助+半题解】BZOJ1461字符串的匹配
    先说思路:因为我们是比对较短的\(B\)与较长的\(A\)的子串,所以我们求不变的\(B\)的\(next\)对于这道题我们可以使用树状数组查询前缀和维护数的排名。对于相同的数我们查询的排名是有误的,因此不仅要比对小于等于该数的前缀和,也要比对小于该数的前缀和。如:对于\(A=2\)\(2\),\(B......
  • Luogu 2791 幼儿园篮球题
    考虑枚举选出来\(i\)个没气的篮球,那么答案可以表示成:\[\text{ans}=\frac{1}{\dbinom{n}{k}}\sum\limits_{i=0}^{k}\dbinom{m}{i}\dbinom{n-m}{k-i}i^L\]注意到这里的组合数\(\dbinom{n}{m}\)在\(n<m\)或者\(m<0\)时无意义,直接当成\(0\)即可。考虑普通幂转下降幂:\[i^......