时间:2016-03-31 23:29:09 星期四
题目编号:[2016-03-31][codeforces][659B][Qualifying Contest].md
题目大意:有m个地区共有n个人参加组队资格赛,每个地区选最高分的两个人参加最终比赛,给出资格赛的成绩,输出每个地区参加组队赛的两个人,如果无法确定人选(比如3个最高分同分),那么就输出?
分析:按地区号排序,再按分数排序,在判断第二名和第三名是否同分
#include <algorithm>
#include <cstdio>
using namespace std;
struct Peo{
char name[20];
int region,score;
bool operator < (const Peo & a)const{
return region < a.region || (region == a.region && score > a.score);
}
}a[100000 + 10];
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i = 0;i < n ; ++i){
scanf("%s%d%d",&a[i].name,&a[i].region,&a[i].score);
}
sort(a,a+n);
int pre = 0;
for(int i = 0;i < n ; ++i){
if(a[i].region != pre){
pre = a[i].region;
if(a[i+1].region == a[i + 2].region && a[i+1].score == a[i + 2].score){
printf("?\n");
continue;
}else{
printf("%s %s\n",a[i].name,a[i+1].name);
}
}
}
return 0;
}