#include<iostream>
#include<queue>
#include<algorithm>
#include<map>
#include<string.h>
#include<math.h>
#include<stdio.h>
#include <iomanip>
#include <stack>
#include <vector>
#include <sstream>
using namespace std;
typedef pair<int,int>candidates_vote;
vector<int>w,l;
vector<string>namelist;
vector<vector<int>>v;
int main()
{
int i,j;
int winnner,loser;
int Case,num_of_candidates;
bool flag = false;
string s;
scanf("%d",&Case);
while(Case--)
{
if(flag)
cout<<endl;
flag = true;
scanf("%d",&num_of_candidates);
namelist.clear();
getchar();
for(i=0;i<num_of_candidates;i++)
{
getline(cin,s);
namelist.push_back(s);
}
输入候选人
v.clear();
while(true)
{
string str1;
getline(cin,str1);
if(str1.size()==0)
break;
stringstream str2(str1);
vector<int>temp;
for(i=0;i<num_of_candidates;i++)
{
int f;
str2>>f;
temp.push_back(f-1);
}
v.push_back(temp);
}
输入投票
unsigned long con = v.size();
vector<bool>eliminated(num_of_candidates,false);
while(true)
{
vector<int>votes(num_of_candidates);
for(i=0;i<con;i++)
{
for(j=0;j<num_of_candidates;j++)
{
if(eliminated[v[i][j]])
continue;
votes[v[i][j]]++;
break;
}
}
vector<candidates_vote>k;
for(i=0;i<num_of_candidates;i++)
{
if(!eliminated[i])
k.push_back(make_pair(votes[i],i));
}
sort(k.begin(),k.end());
reverse(k.begin(),k.end());
//整理投票
winnner = k[0].first;
loser = k[k.size()-1].first;
w.clear();
l.clear();
for(i=0;i<num_of_candidates;i++)
{
if(eliminated[i])
continue;
if(winnner == votes[i])
w.push_back(i);
if(loser == votes[i])
l.push_back(i);
}
if(winnner==loser)
{
for(i=0;i<num_of_candidates;i++)
{
if(!eliminated[i])
cout<<namelist[i]<<endl;
}
break;
}
else if(winnner*2>con)
{
cout<<namelist[w[0]]<<endl;
break;
}
else
{
for(i=0;i<l.size();i++)
eliminated[l[i]] = true;
}
/逐步选举
}
}
}
#include<queue>
#include<algorithm>
#include<map>
#include<string.h>
#include<math.h>
#include<stdio.h>
#include <iomanip>
#include <stack>
#include <vector>
#include <sstream>
using namespace std;
typedef pair<int,int>candidates_vote;
vector<int>w,l;
vector<string>namelist;
vector<vector<int>>v;
int main()
{
int i,j;
int winnner,loser;
int Case,num_of_candidates;
bool flag = false;
string s;
scanf("%d",&Case);
while(Case--)
{
if(flag)
cout<<endl;
flag = true;
scanf("%d",&num_of_candidates);
namelist.clear();
getchar();
for(i=0;i<num_of_candidates;i++)
{
getline(cin,s);
namelist.push_back(s);
}
输入候选人
v.clear();
while(true)
{
string str1;
getline(cin,str1);
if(str1.size()==0)
break;
stringstream str2(str1);
vector<int>temp;
for(i=0;i<num_of_candidates;i++)
{
int f;
str2>>f;
temp.push_back(f-1);
}
v.push_back(temp);
}
输入投票
unsigned long con = v.size();
vector<bool>eliminated(num_of_candidates,false);
while(true)
{
vector<int>votes(num_of_candidates);
for(i=0;i<con;i++)
{
for(j=0;j<num_of_candidates;j++)
{
if(eliminated[v[i][j]])
continue;
votes[v[i][j]]++;
break;
}
}
vector<candidates_vote>k;
for(i=0;i<num_of_candidates;i++)
{
if(!eliminated[i])
k.push_back(make_pair(votes[i],i));
}
sort(k.begin(),k.end());
reverse(k.begin(),k.end());
//整理投票
winnner = k[0].first;
loser = k[k.size()-1].first;
w.clear();
l.clear();
for(i=0;i<num_of_candidates;i++)
{
if(eliminated[i])
continue;
if(winnner == votes[i])
w.push_back(i);
if(loser == votes[i])
l.push_back(i);
}
if(winnner==loser)
{
for(i=0;i<num_of_candidates;i++)
{
if(!eliminated[i])
cout<<namelist[i]<<endl;
}
break;
}
else if(winnner*2>con)
{
cout<<namelist[w[0]]<<endl;
break;
}
else
{
for(i=0;i<l.size();i++)
eliminated[l[i]] = true;
}
/逐步选举
}
}
}