PKU 2643-Election
問題概要
カナダのある選挙区での選挙を考える.
各候補者はそれぞれ一つの政党に属するか無所属である,
また,別の候補者が同じ政党に属することは無いとする.
候補者の情報と投票の情報が与えられるので,勝利した政党の名前を答えよ.
解法
mapを使って数える.
実装(C++)
gets!
#include <algorithm> #include <vector> #include <iostream> #include <cstdio> #include <map> using namespace std; typedef long long int lli; #define REP(i,x) for(int i=0;i<(int)(x);i++) #define rep(i,s,x) for(int i=s;i<(int)(x);i++) #define FOR(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();i++) #define RREP(i,x) for(int i=(x);i>=0;i--) #define RFOR(i,c) for(__typeof((c).rbegin())i=(c).rbegin();i!=(c).rend();i++) char in[100]; map<string,string> conv; map<string,int> coun; int main(){ gets(in); int n=atoi(in); string name,party; for(int i=0;i<n;i++){ gets(in); name=string(in); gets(in); party=string(in); if(party=="independent"){ party=name+"__"; } conv[name]=party; } gets(in); int m=atoi(in); for(int i=0;i<m;i++){ gets(in); coun[conv[string(in)]]++; } string q;int c=0; bool NA=true; FOR(it,coun){ if(it->first==""){ continue; } if(c==it->second){ NA=true; } if(c<it->second){ NA=false; c=it->second; q=it->first; } } if(!NA){ if(q[q.size()-1]=='_'&&q[q.size()-2]=='_'){ puts("independent"); }else{ printf("%s\n",q.c_str()); } }else{ printf("tie\n"); } }