时间: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;}