数据过水
查看原帖
数据过水
983912
Linzijun_0607楼主2024/10/24 16:00

无法证明正确性的贪心居然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(){
//	freopen("1.in","r",stdin);
	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");
}

有人能证明正确性吗?

2024/10/24 16:00
加载中...