http://codeforces.com/contest/659/problem/B
题意:每个区域中有一些人,这些人有人名和对应的分数,如果能够确定每个区域中分数前两名,就把这两个人的名字输出,如果不能确定,就输出问号。
vector相当于一个不知道下标要开多少大的数组,而且数组中可以存放更多类型的东西。
#include<bits/stdc++.h> //包含了所有的头文件
#define MAXN 100005
using namespace std; //不包括在头文件中
int n, m, region, score;
string name;
vector<pair<int, string> >s[MAXN];
bool cmp(pair<int,string> A,pair<int,string> B)
{
return A.first>B.first;
}
int main()
{
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++)
{
cin >> name >> region >> score;
s[region].push_back(make_pair(score, name));
}
for (int i = 1; i <= m; i++)
{
sort(s[i].begin(), s[i].end(), cmp);
}
for (int i = 1; i <= m; i++)
{
if (s[i].size() == 2)
cout << s[i][0].second << ' ' << s[i][1].second << endl;
else
{
if (s[i][1].first == s[i][2].first) cout << '?' << endl;
else
cout << s[i][0].second << ' ' << s[i][1].second << endl;
}
}
return 0;
}