题目链接:传送门
题意描述:
Vasya去参加奥利匹克大赛,比赛分两场,有n个人参加。他的老师已经知道的比赛的得分,但具体得分的是谁不知道,也知道了Vasya两场比赛加起来至少k分,让你判断Vasya的最好和最坏名次(如果两名选手得分相同,那么有裁判决定名次)。
题意分析:
最好的成绩当然是第一名啦,这毋庸置疑的了。首先要明白,如果有多个人得分相同,那么最坏的名次当然是最后了,因为得分相同由裁判决定名次嘛。然后就是贪心了,我们要知道,最差的名次就是要组成尽量多的组评分大于等于k的,组数就是最差的成绩了。我们先把第一组数据a排序,然后在数组第二组数据的时候在第一组数据二分找出大于等于k-b[i]的最小值,然后让b[i]和找出来的数匹配,删除a数组里面的那个值,那样子的话就可以贪心的取得最多的评分大于等于k的评分了。
代码:
#include<bits/stdc++.h>
using namespace std;
vector<int>Q;
int n, k;
int main(){
cin >> n >> k;
int t;
for(int i=0;i<n;++i){
scanf("%d", &t);
Q.push_back(t);
}
sort(Q.begin(), Q.end());
int ans = 0;
vector<int>::iterator it;
for(int i=0;i<n;++i){
scanf("%d", &t);
it = lower_bound(Q.begin(), Q.end(), k-t);
if(it != Q.end()){
ans++;
Q.erase(it);
}
}
cout << "1 " << ans << endl;
return 0;
}