题目描述
LZY成功的破解了数字规律,没想到他前往下一关前要通过一个独木桥。这个独木桥由N块木板组成,每块木板上有一个数字。这个独木桥最奇怪的地方,是LZY第一步只能站在它的平衡点上,否则桥会立刻倒塌,LZY就会堕入万丈深渊。
我们是这样定义独木桥的平衡点的:LZY当前所站的左侧所有木板数字相加的和等于右侧所有木板相加数字的和。
如果独木桥不存在平衡点,那么我们应该输出 -1。如果数组有多个平衡点,那么我们应该输出最靠近左边的那一个。
现在假设LZY第一步能够到达独木桥的任何一个点,请你帮他找一找他应该落在哪个位置。
输入
测试样例由多组测试数据组成。每组测试数据第一行输入一个正整数 n ( 1 <= n <= 100000 )代表独木桥上的木板数量
第二行输入n个数字ni,(0 <= n <= 1000 ) 代表每块木板上的数字
约束:
每个测试数据文件最多不超过20组测试样例。
输出
输出LZY应该到达的平衡点下标,如果不存在,输出-1
样例输入
6
1 7 3 6 5 6
3
1 2 3
样例输出
3
-1
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
int n;
int a[100005];
while(cin>>n){
for(int i=0;i<n;i++)
cin>>a[i];
int max=a[0];
int min=a[n-1];
int z=1,m=n-2;
int flag=0;
while(1){
if(z==m)
break;
if(max>min){
min+=a[m];
m--;
}else {
max+=a[z];
z++;
}
}
if(max==min)
cout<<z<<endl;
else
cout<<-1<<endl;
}
return 0 ;
}
思路
给定数值,那边小,那边就加1块木板,等两边一样时判断中间是否只剩一个木板。