P4552 [Poetize6] IncDec Sequence
题目描述
给定一个长度为 \(n\) 的数列 \({a_1,a_2,\cdots,a_n}\),每次可以选择一个区间 \([l,r]\),使这个区间内的数都加 \(1\) 或者都减 \(1\)。
请问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种。
输入格式
第一行一个正整数 \(n\)
接下来 \(n\) 行,每行一个整数,第 \(i+1\) 行的整数表示 \(a_i\)。
输出格式
第一行输出最少操作次数
第二行输出最终能得到多少种结果
输入输出样例
输入 #1
4
1
1
2
2
输出 #1
1
2
说明/提示
对于 100% 的数据,\(1n\le 100000, 0 \le a_i \le 2^{31}\)。
差分的水题。
首先对于第一问的话,我们可以对原序列差分一下,然后我们两种区间操作就变成了,一个值加一,一个值减一。
我们要让操作次数尽可能的小,所以每次要尽量的把一个正数和负数凑在一起进行操作。
设所有差分数组正数的和 \(a\),负数的和为 \(b\),那么我们的最小操作次数就是 \(max(-a,b)\)
对于第二问的话,我们进行了 \(min(-a,b)\) 次操作之后,肯定只会剩下一个负数或者正数 \(x\),剩下的数就全为零。
我们剩下的几次操作就只能对 \(a_1,x\) 或者 \(x,a_{n+1}\) 进行操作。
然后对 \(a_1\) 进行 \(0,1,2,3,4...x\) 操作所得到的答案也是不同,所以第二问的答案为 \(abs(-a-b)+1\)
Code
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define int long long
int n,sum1,sum2,ans;
int a[100010],d[100010];
inline int read()
{
int s = 0,w = 1; char ch = getchar();
while(ch < '0' || ch > '9'){if(ch == '-') w = -1; ch = getchar();}
while(ch >= '0' && ch <= '9'){s = s * 10 + ch - '0'; ch = getchar();}
return s * w;
}
signed main()
{
n = read();
for(int i = 1; i <= n; i++) a[i] = read();
for(int i = 1; i <= n; i++)
{
d[i] = a[i] - a[i-1];
}
for(int i = 2; i <= n; i++)
{
if(d[i] < 0) sum1 += d[i];
if(d[i] > 0) sum2 += d[i];
}
ans = max(abs(sum1),sum2);
printf("%lld\n",ans);
printf("%lld\n",abs(-sum1-sum2)+1);
return 0;
}
P4552 [Poetize6] IncDec Sequence的更多相关文章
- 洛谷 P4552 [Poetize6] IncDec Sequence【差分+脑洞】
一看区间操作,很容易想到差分 所以就是先差分,然后为了保证最小步数,把政府差分抵消,也就相当于原数组区间加减 第二问,因为差分数组抵消之后不为0就需要使用n+1的虚拟位置,而这个的值其实没有,所以我们 ...
- Poetize6: IncDec Sequence
3043: IncDec Sequence Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 233 Solved: 132[Submit][Statu ...
- 解题:Poetize6 IncDec Sequence
题面 差分原数列得到差分数组$dif$,这样对于$dif[2]->dif[n]$会多出来两个“空位置”$1$和$n+1$.然后区间加减就变成了使一个位置$+1$,另一个位置$-1$(可以对“空位 ...
- Luogu 4552 [Poetize6] IncDec Sequence
在BZOJ上好像被权限掉了. 考虑差分,定义差分数组$b$ $$b_i = \left\{\begin{matrix} a_i \ \ \ (i == 1)\\ a_i - a_{i - 1}\ \ ...
- 【洛谷P4552】IncDec Sequence
题目大意:给定一个长度为 N 的序列,现可以进行若干次区间 +1 或区间 -1 操作,求使得序列所有的值均相同的最小操作数是多少,且最终得到的序列有多少种. 题解: 首先考虑执行区间+和区间-操作,可 ...
- BZOJ 3043 [Poetize6] IncDec Sequence
题目描述 给定一个长度为n的数列$a_1,a_2,--,a_n$,每次可以选择一个区间[l,r],使这个区间内的数都加1或者都减1. 请问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最 ...
- 【BZOJ 3043】 3043: IncDec Sequence (差分)
3043: IncDec Sequence Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 589 Solved: 332 Description 给 ...
- BZOJ 3043: IncDec Sequence
3043: IncDec Sequence Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 578 Solved: 325[Submit][Statu ...
- bzoj 3043: IncDec Sequence 模拟
3043: IncDec Sequence Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 248 Solved: 139[Submit][Statu ...
随机推荐
- 基于python tkinter的课堂点名小程序
import datetime import json import os import random import tkinter as tk import openpyxl # 花名册文件名很多人 ...
- 【转载】pandas常用函数
原文链接:https://www.cnblogs.com/rexyan/p/7975707.html 一.import语句 import pandas as pd import numpy as np ...
- Labview学习之路(二)截屏时弹出来的窗口总是关闭
当屏幕上存在一些弹出来的窗口时,总是会出现一按下截图快捷键那些窗口就关闭的情况,开始我也很苦恼,后来我发现,只要按顺序按下 Ctrl Alt A 就可以让那些窗口不关闭,记住一定 ...
- 网络测速神器:SpeedTest深度指南
最近在测试一个项目,里面涉及到一个测试case:在linux服务器上,当网络带宽较差时,观察服务的消息处理能力和表现.限制网卡带宽有许多方法,比如Wondershaper或者ethtool.那验证限速 ...
- 程序员软件开发最好的IDE集成工具eclipse各个版本的详细介绍。详细介绍,送给初学者的朋友
对于刚接触软件开发的初学者,在下载eclipse时,对官网上面提供的各种版本的选择犹豫不决.下面将对常用的几个版本进行介绍. Eclipse版本 Eclipse Standard 该版本是eclips ...
- shader变体
unity shader 变种(多重编译 multi_compile) https://www.jianshu.com/p/f34d896dde5d Unity Shader - Making mul ...
- Unity Plugins的使用方法
一.为插件设置平台的方法 unity5之前,是通过把插件搞到对应目录进行区分平台的(比如在build target是ios平台时只把IOS目录的插件build进去),unity5之后提供了设置平台/c ...
- SQL SERVER管理维护计划错误,备份错误,1053/3041/错误18204,严重性16,状态1
在sqlserv2008/2012里设置了管理-维护计划-备份计划,前些天遇到报错-1053/3041/错误18204,严重性16,状态1等:分享下解决方法. 1.在服务器执行任务报错 2.解决办法 ...
- 启动Tomcat服务器端口被占用解决方法
Caused by: java.net.BindException: Address already in use: bind 1.输入 netstat -ano|findstr 8080,回车,显示 ...
- Java实现内嵌浏览器
创建项目 ----> 导入需要的jar ----> 代码实现 需要的jar: https://pan.baidu.com/s/1MEZ1S0LnKSMGQm24QWgmCw 代码: ...