poj-2643-Election

来源:互联网 发布:码枫青少儿编程 编辑:程序博客网 时间:2024/06/02 04:46

题意:给你候选人以及候选人党派, 再给你每个人的选票, 统计出谁当选了;如果没有最优解, 输出”tie“否则输出当选人的党派;

题解:还是两个map 一个映射候选人的党派, 还有一个映射候选人选票;

//code


#include<iostream>#include<map>#include<cstdio>#include<cstring>#include<string>#include<cctype>#include<algorithm>using namespace std;struct String{char name[88];friend bool operator < (String a, String b){return strcmp(a.name, b.name)<0;}};int main(){//freopen("in.txt", "r", stdin);//freopen("out.txt", "w", stdout);map<String, String>_m_party;map<String, String>::iterator party_it;map<String, int>_m;map<String, int>::iterator iter, ans;int n, m;String tmp1, tmp2;scanf("%d\n", &n);for(int i=0; i<n; i++){gets(tmp1.name);gets(tmp2.name);_m_party.insert(map<String, String>::value_type(tmp1, tmp2));_m.insert(map<String, int>::value_type(tmp1, 0));}scanf("%d\n", &m);for(int i=0; i<m; i++){gets(tmp1.name);iter = _m.find(tmp1);iter->second++;}int num=0;ans = _m.begin();for(iter=_m.begin(); iter!=_m.end(); ++iter){if(iter->second == ans->second) num++;else{if(iter->second > ans->second) {ans = iter;num=1;}}}if(num > 1) printf("tie\n");else{party_it = _m_party.find(ans->first);printf("%s\n", party_it->second.name);}return 0;}


原创粉丝点击