【问】
查看原帖
【问】
657499
Ayaka_Li楼主2023/7/9 15:03

求反例

#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
const int N=5e6+50;
int a[N],b[N];
int c[N];
int n;
long long sum1,sum2;
struct node {
	int a,b;
}f[N];
bool cmp1(node q,node p) {
	return  q.b>p.b;
}
bool cmp2(node q,node p) {
	return q.a<p.a;
}
bool o;
int main() {
	cin>>n;
	if (n&1) o=1;
	else o=0;
	for (int i=1;i<=n;i++) {
		int x,y;
		cin>>x>>y;
		if (x<y) f[i].a=x,f[i].b=y;
		else f[i].a=y,f[i].b=x;
	}
	
	
//	for (int i=1;i<=n;i++) {
//		cout<<f[i].a<<' ';
//	}
//	cout<<endl;
//	for (int i=1;i<=n;i++) {
//		cout<<f[i].b<<' ';
//	}


	sort(f+1,f+1+n,cmp1);
	
	
//	for (int i=1;i<=n;i++)
//		cout<<f[i].a<<' ';
//	cout<<endl;
//	for (int i=1;i<=n;i++)
//		cout<<f[i].b<<' ';
//	cout<<endl;

	
	for (int i=1;i<=n;i++) {
		if (i<=n/2+o) sum1-=f[i].b;
		else sum1+=f[i].a; 
	}
	
	sort(f+1,f+1+n,cmp2);
	
//	for (int i=1;i<=n;i++)
//		cout<<f[i].a<<' ';
//	cout<<endl;
//	for (int i=1;i<=n;i++)
//		cout<<f[i].b<<' ';
//	cout<<endl;


	for (int i=1;i<=n;i++) {
		if (i<=n/2+o) sum2+=f[i].a;
		else sum2-=f[i].b;
	}
	
	
	cout<<min(sum1,sum2);
	
	
	return 0;
}  
2023/7/9 15:03
加载中...