题意

高桥君想把 $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;
}