题目描述
解题思路
对于每个候选人进行投票,输出票数最多的那个人所在党。
可以用map对候选人和所在党进行映射,投票结果存在一个结构体里,再排序。
参考代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <string>
#include <map>
using namespace std;
const int maxn = 10010;
struct x{
int cnt;
int num;
}ans[maxn];
bool cmp(x s1,x s2){return s1.cnt > s2.cnt;}
map<string,int> Id;
vector<string> Set;
int ID(string s);
int main()
{
int n,m,i;
while (cin >> n){
Id.clear();
Set.clear();
map<int,string> cp;
memset(ans,0,sizeof(ans));
string s1,s2;
getchar();
for (i = 0;i < n;i++){
getline(cin,s1);getline(cin,s2);
cp[ID(s1)] = s2;//候选人s1对应的党派为2
}
cin >> m;getchar();
string s;
for (i = 0;i < m;i++){
getline(cin,s);
if (!Id.count(s)) continue;//如果候选人中没有s则继续输入
ans[i].num = i;
ans[Id[s]].cnt++;
}
int l = Set.size();
sort(ans,ans+l,cmp);
if (ans[0].cnt == ans[1].cnt)//如果最大的至少有2个,输出"tie"
cout << "tie" << endl;
else
cout << cp[ans[0].num] << endl;
}
return 0;
}
int ID(string s){//给每个候选人分配ID
if (Id.count(s)) return Id[s];
Set.push_back(s);
return Id[s] = Set.size()-1;
}