#题目: 蓝桥杯练习系统
问题描述
两个强盗刚刚抢到一条十分珍贵的珍珠项链,正在考虑如何分赃。由于他们不想破坏项链的美观,所以只想把项链分成两条连续的珍珠链。然而亲兄弟明算账,他们不希望因为分赃不均导致不必要的麻烦,所以他们希望两条珍珠链的重量尽量接近。于是他们找到了你,希望让你帮忙分赃。
我们认为珍珠项链是由n颗不同的珍珠组成的,我们可以通过称重,分别称出每颗珍珠的重量(我们忽略连接珍珠的“链”的重量)。你要求的是每个人至少能得到多重的珍珠(即分赃少的那个人能得到多重的珍珠)。
输入格式
第一行一个整数n,表示这个珍珠项链有多少颗珍珠。第二行n个整数,顺时针给出每颗珍珠的重量wi。(你要注意的是,第一课珍珠和最后一颗珍珠是相连的)
输出格式
一个整数,表示分赃少的那个人能得到多重的珍珠。
样例输入
7
1 2 3 4 3 2 1
样例输出
7
数据规模和约定
对于30%的数据,n<=200;
对于60%的数据,n<=2000;
对于100%的数据,n<=50000,0<wi<=1000。
#include <bits/stdc++.h>
#define LL long long int
using namespace std;
LL a[100000+7];
int main()
{
LL sum=0,cnt=0,ans=0,n;
cin>>n;
for(LL i=0;i<n;i++)
{
cin>>a[i];
sum+=a[i];
}
const LL flag=sum/2;
LL i=0,j=0;
cnt=a[0];
while(i<n)
{
if(cnt<flag)
{
if(j==n-1)
{
j=0;
}
else
{
j++;
}
cnt+=a[j];
}
else
{
cnt-=a[i];
i++;
}
ans=max(ans,min(cnt,sum-cnt));
//cout<<"i="<<i<<",j="<<j<<" ";
//cout<<ans<<endl;
}
cout<<ans<<endl;
return 0;
}
/