题意
高桥君想把 $n$ 个铁棒分成两组,使得它们的长度之和相等。
但是有时可能不能分成两组,于是他考虑了两种操作。每次操作要花费他一块钱。
他可以将任意铁棒增长 1 毫米。
他可以将长度大于 1 毫米的铁棒缩短 1 毫米。
因为高桥君很穷,所以请求出他至少要用多少块钱才能完成这个任务。
这个题的翻译有点容易误导大家,实际上这里的铁棒分组是要连续的。
思路
很简单的思路~适合萌新
考虑分割的位置,假设分割的位置为$i$,铁棒长度为$a_i$
那么很显然需要$\vert (a_1+a_2...+a_i)-(a_i+a_{i+1}...+a_n) \vert$块钱
于是线性枚举分割点,计算两边差值,取最小值输出即可。
此外记得开long long
代码
#include<bits/stdc++.h>
using namespace std;
long long n,a[200005],sum=0,ans,tmp=0;
int main() {
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
sum+=a[i];//sum表示所有数的总和
}
ans=sum;
for(int i=1;i<=n;i++){
tmp+=a[i];//tmp表示当前累加到的和
ans=min(ans,abs(tmp-(sum-tmp)));
}
cout<<ans;
return 0;
}
最后一次更新于2021-01-30
0 条评论