CH-0304 IncDec Sequence
0304 IncDec Sequence 0x00「基本算法」例题
描述
给定一个长度为 n(n≤10^5 ) 的数列 {a_1,a_2,…,a_n},每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一。
求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种。
输入格式
第一行一个正整数n。
接下来n行,每行一个整数,第i+1行的整数表示ai。
输出格式
第一行输出最少操作次数。
第二行输出最终能得到多少种结果。
样例输入
4
1
1
2
2
样例输出
1
2
数据范围与约定
- 对于100%的数据,n=100000,0<=ai<2147483648
来源
毕克,石家庄二中【Nescafé 22】杯NOIP模拟赛
OJ-ID:
ch-0304
author:
Caution_X
date of submission:
20191117
tags:
差分
description modelling:
给定长度为n的数组{a1,a2,......,an},每次可以选择区间[l,r]的所有元素加1或减1
问:至少需要多少次操作使得所有的数都相等,最终得到的数列可能有多少种
major steps to solve it:
(1)作差分数组b[](b[1]=a[1],b[n+1]=0)
(2)目标是使得b2,b3,.....,bn都为0,记p为b[]正数之和,q为b[]负数之和
(3)每一次对a进行的操作都相当于对b选择两个数分别进行+1和-1
(4)现在讨论b中选择地两个数bi,bj:
a)(2=<i,j<=n)
b)(i=1&&j<=n)
c)(i>=2&&j=n+1)
d)(i=1&&j=n+1)//d为无效操作,必不是最优解所进行的操作
(5)对于+1和-1操作,为了操作数最少,每次选择正数-1,负数+1,需进行操作min(p,q)
(6)当只有正数和负数时,还剩下|p-q|为配对,选择这些未配对的和b[0]或b[n+1]配对,需进行操作|p-q|,每一次操作都会得到一个新的b[0],所以最终数组个数为|p-q|+1
(7)综上:最少操作数:min(p,q)+|p-q|,最终数组种类|p-q|+1
AC code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[],b[];
int main()
{
ll n;
scanf("%lld",&n);
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
}
b[]=a[];
ll s0=,s1=;
for(int i=;i<=n;i++)
{
b[i]=a[i]-a[i-];
if(b[i]>) s0+=b[i];
else s1+=b[i];
}
s0=abs(s0);
s1=abs(s1);
b[n+]=;
ll ans0=min(s0,s1)+abs(s0-s1);
ll ans1=abs(s0-s1)+;
printf("%lld\n%lld\n",ans0,ans1);
return ;
}
CH-0304 IncDec Sequence的更多相关文章
- Poetize6: IncDec Sequence
3043: IncDec Sequence Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 233 Solved: 132[Submit][Statu ...
- bzoj 3043: IncDec Sequence 模拟
3043: IncDec Sequence Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 248 Solved: 139[Submit][Statu ...
- 前缀和与差分之IncDec sequence
参考链接:https://blog.csdn.net/hzk_cpp/article/details/80407014 题目链接:https://www.acwing.com/problem/cont ...
- 【BZOJ 3043】 3043: IncDec Sequence (差分)
3043: IncDec Sequence Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 589 Solved: 332 Description 给 ...
- 【BZOJ3043】IncDec Sequence 乱搞
[BZOJ3043]IncDec Sequence Description 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要 ...
- BZOJ 3043: IncDec Sequence
3043: IncDec Sequence Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 578 Solved: 325[Submit][Statu ...
- 2498 IncDec Sequence
2498 IncDec Sequence 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 给 ...
- 差分:IncDec Sequence 差分数组
突然就提到了这个东西,为了不再出现和去年联赛看见二分没学二分痛拿二等第一的情况,就去学了一下,基础还是比较简单的-- 先看一个经典例题: 给定一个长度为n的数列{a1,a2...an},每次可以选择一 ...
- Luogu 4552 [Poetize6] IncDec Sequence
在BZOJ上好像被权限掉了. 考虑差分,定义差分数组$b$ $$b_i = \left\{\begin{matrix} a_i \ \ \ (i == 1)\\ a_i - a_{i - 1}\ \ ...
随机推荐
- Java修饰符public,protected,default,private访问权限
public 具有最大的访问权限.所有类可访问. protected 主要是用来保护子类.自身.子类及同一个包中类可以访问 default 没有加修饰符的.有时候也称为friendly,它是针对本包访 ...
- C语言每日一练——第1题
一.程序功能 程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx.并把in.dat文件的内容输入到程序,并把输出结果输出道out.dat文件夹中例如:若输入17,5 则应该输入:19,23,29 ...
- 牛客NOIP暑期七天营-提高组2
第一题:ACGT 题目链接:https://ac.nowcoder.com/acm/contest/931/A trie树.hash.map遍历 ①.trie树上的节点多记一个rest值表示还有多少 ...
- 小白的springboot之路(九)、集成MongoDB
0.前言 MongoDB是一个高性能.开源的文档型数据库,是当前nosql数据库中最热门的一种,在企业中广泛应用:虽然前段时间更改了开源协议导致被很多企业舍弃,但主要是对云服务商影响较大,对我们来说其 ...
- .netcore实现一个读写分离的数据库访问中间件
在实际业务系统中,当单个数据库不能承载负载压力的时候,一般我们采用数据库读写分离的方式来分担数据库负载.主库承担写以及事务操作,从库承担读操作. 为了支持多种数据库我们先定义一个数据类型字典.key为 ...
- c++-重载等号,数组,指针,字符串类
重载 重载=操作符 1先释放旧对象资源 2用一个对象=给另外一个对象 3函数返回值当左值 返回一个引用 4 数组类 Array& operator=(Array& a1); 5 字符串 ...
- SpringBoot之【mybatisplus】代码生成器
1.概述. AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity.Mapper.Mapper XML.Service.C ...
- crontab 定时任务没有响应 检测步骤
设置规则 # 每分钟执行一次 */1 * * * * /scripts/script.sh # 每小时执行一次 0 */1 * * * /scripts/script.sh # 每天 02:00 执行 ...
- MYSQL 游标学习及使用实例
who?(游标是什么?)游标(cursor)官方定义:是系统为用户开通的一个数据缓冲区,存放sql执行结果.每个游标区都有一个名字,用户可以通过sql语句逐一从游标中获取记录,并赋值给变量,交由主语言 ...
- C++之下载Visual Studio Installer缓慢问题
将IPv4中设置DNS首选项为8.8.8.8即可.