题目链接:http://codeforces.com/problemset/problem/808/D
题意:给你一组数据,让你去整出来他和的一半,一开始不知道怎么办,看了大佬的代码,nia,一切都在码里面
My ugly code
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=100000+10;
int n;
ll a[maxn];
ll sum;
map<ll,ll> mp,mp1;
int main(){
scanf("%d",&n);
sum=0;
for(int i=1;i<=n;i++){
scanf("%lld",a+i);
sum+=a[i];
mp[ a[i] ]++;
}
if(sum%2==1){
printf("NO\n");
return 0;
}
sum/=2;
ll tmp=0;
for(int i=1;i<=n;i++){
tmp+=a[i];
mp[ a[i] ]--;
mp1[ a[i] ]++;
if(mp[sum- tmp ]){
printf("YES\n");
return 0;
}
if(mp1[tmp-sum]){
printf("YES\n");
return 0;
}
}
printf("NO\n");
return 0;
}