题目描述
给定 n 个数字 1,2,3,…,a1,a2,a3,…,an,请将它分成两个连续的子串,使得两个子串和相差最小,输出最小的差值。
输入格式
- 第一行,单个整数 n
- 第二行,n 个整数 1,2,…,a1,a2,…,an
输出格式
单个整数:表示两个子串总和之差的最小值。
数据范围
- 对于 30%30% 的数据,1≤1001≤n≤100
- 对于 70%70% 的数据,1≤100001≤n≤10000
- 对于 100%100% 的数据,1≤1000001≤n≤100000
- 1≤100001≤ai≤10000
样例数据
输入:
3
100 1 1
输出:
98
说明:
100-(1+1)
输入:
6
1 2 3 4 5 6
输出:
1
说明:
(5+6)-(1+2+3+4)
详见代码:
#include<bits/stdc++.h>
using namespace std;
int a[100005];
int n;
int ans=1e9;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
a[i]+=a[i-1];
}
for(int i=1;i<=n;i++)
{
ans=min(ans,abs(a[n]-2*a[i]));
}
cout<<ans;
return 0;
}