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");
	}
}