无法证明正确性的贪心居然A了???
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,x,y,xx,yy,a[N],b[N];
bool cmp(int a,int b){
return a>b;
}
signed main(){
cin>>n>>x>>y;
for(int i=1,xxx;i<=n;i++){
cin>>xxx;
if(i==1) x-=xxx;
else if(i&1) a[++a[0]]=xxx;
else b[++b[0]]=xxx;
}
b[++b[0]]=abs(y),a[++a[0]]=abs(x);
sort(a+1,a+a[0]+1,cmp);
sort(b+1,b+b[0]+1,cmp);
for(int i=1;i<=a[0];i++){
if(xx>0) xx-=a[i];
else xx+=a[i];
}
for(int i=1;i<=b[0];i++){
if(yy>0) yy-=b[i];
else yy+=b[i];
}
if(xx||yy) puts("No");
else puts("Yes");
}
有人能证明正确性吗?