蒟蒻求助神犇
  • 板块灌水区
  • 楼主Krisinsonia318
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/8/10 13:40
  • 上次更新2023/11/4 11:12:03
查看原帖
蒟蒻求助神犇
428444
Krisinsonia318楼主2021/8/10 13:40

首先感谢每位大佬点进来!蒟蒻很想得到你们的帮助!蒟蒻可以接受C++,c,Pascal的代码,或者简单的思路!【抱拳.png】

题目背景


lkmcfj有很多书,他想整理一下自己的图书。

每本书都有一个a[i]作为它的标签。现在有n本书排成了一排,lkmcfj要对它们的标签进行修改以满足要求。

设第i本书的标签上个的数字与它之前所有的图书标签上数字之和为sum[i],即:

sum[1]=a[1],sum[i]=sum[i-1]+a[i](i>1)(就是前缀和吧)

每次操作,lkmcfj都可以把一个标签加1或者减1,而所有图书需要满足以下条件:

1.sum[i]不为零。

2.对于i>1的,sum[i]与sum[i-1]正负相反。

蒟蒻总结了一下:

1.在ans次操作后,读入a[i]时的sum[i]与操作a[i]后的sum[i]必须相同;(也就是说改变后的序列不能改变前缀和的大小)

2.a[i]在操作后,要变成“正 负 正 负”或“负 正 负 正”的样子,且数列中没有0。

lkmcfj想知道,最少需要多少次操作才能使序列变成他希望的样子。


输入格式

第一行一个正整数,n,表示书本数量。

第二行n个正整数a[i],意义如题目所述。


输出格式

一行,一个正整数,表示最少的操作次数。


样例

样例输入:

4
1 -3 1 0

样例输出:

4

样例解释:

将序列变成:
1,-2,2,-2即可

数据范围:

对于30%的数据,n<=10; 对于100%的数据,n<=1,000,000,a[i]<=1,000,000,000

感谢所有帮助蒟蒻的神犇们!

2021/8/10 13:40
加载中...