题目链接:https://codeforces.com/contest/24/problem/B
#include <iostream>
#include <cstring>
#include <unordered_map>
#include <algorithm>
using namespace std;
static const int score[55]={0,25,18,15,12,10,8,6,4,2,1};
static const int MAXN=1000+10;
unordered_map<string,int> name;
struct Driver{
int point;
int pos[55];
string na;
}drivers[MAXN];
int t,n,idx;
string str;
bool cmp1(Driver p,Driver q)
{
if(p.point==q.point)
{
for(int i=1;i<=50;i++)
if(p.pos[i]!=q.pos[i]) return p.pos[i]>q.pos[i];
}
return p.point>q.point;
}
bool cmp2(Driver p,Driver q)
{
if(p.pos[1]==q.pos[1])
{
if(p.point==q.point)
{
for(int i=2;i<=50;i++)
if(p.pos[i]!=q.pos[i]) return p.pos[i]>q.pos[i];
}
return p.point>q.point;
}
return p.pos[1]>q.pos[1];
}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cin>>str;
int id;
if(name[str]) id=name[str];
else id=name[str]=++idx,drivers[idx].na=str;
drivers[id].point+=score[i],drivers[id].pos[i]++;
}
}
sort(drivers+1,drivers+idx+1,cmp1);
cout<<drivers[1].na<<endl;
sort(drivers+1,drivers+idx+1,cmp2);
cout<<drivers[1].na<<endl;
return 0;
}