加入收藏
举报
02-12 17:19
#0
文件名称:
增减序列.md
所在目录:
剑指offer
文件大小:
1.28 KB
下载地址:
0voice/campus_recruitmen_questions
   
免责声明:本网站仅提供指向 GitHub 上的文件的链接,所有文件的版权归原作者所有,本网站不对文件内容的合法性、准确性或安全性承担任何责任。
文本预览:
# 题目
给定一个长度为 n 的数列 a1,a2,…,an,每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一。
求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种。
输入格式

第一行输入正整数 n。
接下来 n 行,每行输入一个整数,第 i+1 行的整数代表 ai
输出格式

第一行输出最少操作次数。
第二行输出最终能得到多少种结果。
数据范围

05,

0≤ai<2147483648
输入样例:
```
4
1
1
2
2
```
输出样例:
```
1
2
```
# 参考答案
```c++
#include
using namespace std;
#define ll long long
#define N 110000
ll n,m,i,j,p,q,a[N];
int main()
{
scanf("%lld",&n);
for (i=1;i<=n;i++)
scanf("%lld",&a[i]);
for (i=2;i<=n;i++)
{
ll c=a[i]-a[i-1];
if (c>0)//不要输入 if (c) 因为c是指不为0就好了,如果c为-1,那么最后的布尔值也为1,if(c)的意思是,只要c不为0,那么条件的布尔值都为1
p+=c;
else
q-=c;
}
ll ans1=max(p,q),ans2=abs(p-q)+1;
cout< return 0;
}
点赞 回复
回帖
支持markdown部分语法 ?