2019 Multi-University Training Contest 10 1005:Welcome Party

Welcome Party

题意:

有n个学生,每个学生都有歌唱和相声能力。选择一个集合A,一个集合B。使得集合A里面的最大值与集合B的最大值的差值最小。

思路:

按歌唱能力从大到小枚举,枚举到当前学生的歌唱能力,那么比该学生歌唱能力强的都应该去表演相声,用multiset维护一下。同时其他的还没有枚举到的找到当前学生唱歌能力的最接近的值。最后对答案取下min即可。

代码:

#include
using namespace std;
typedef long long ll;
struct node{
	ll x,y;
}a[100005];
int cmp(node a,node b){
	return a.x>b.x;
}
int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		int n;
		multisets1;
		multisets2;
		scanf("%d",&n);
		for(int i=0;i*s1.rbegin()))
					ans=tmp;
				if(it!=s2.begin()){
					--it;
					tmp=abs(*it-a[i].x);
					if(tmp*s1.rbegin()))
						ans=tmp;
				}
			}
			s1.insert(a[i].y);
		}
		printf("%lld\n",ans);
	}
	return 0;
}

 

你可能感兴趣的:(多校)