AtCoder Beginner Contest #008 B問題 - 投票

Source

AtCoder Beginner Contest #008
問題文

問題概要

$N$ 人の人がそれぞれ人物に投票した.
それぞれの人 $k$ が投票した人物の名前 $S_k$ が与えられるので,最も得票数の多かった人物の名前を求める問題.
該当者が複数いるなら,該当する人のどれを出力してもよい.
人物の名前は小文字のアルファベットのみからなり,同じ名前の人物はいないとして良い.

解法

やるだけ.
$\verb|map<string,int>|$ を使うとたぶん楽.

C++によるスパゲッティなソースコード

#include<bits/stdc++.h>
using namespace std;

#define REP(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)

#define mygc(c) (c)=getchar_unlocked()
#define mypc(c) putchar_unlocked(c)

void reader(int *x){int k,m=0;*x=0;for(;;){mygc(k);if(k=='-'){m=1;break;}if('0'<=k&&k<='9'){*x=k-'0';break;}}for(;;){mygc(k);if(k<'0'||k>'9')break;*x=(*x)*10+k-'0';}if(m)(*x)=-(*x);}
int reader(char c[]){int i,s=0;for(;;){mygc(i);if(i!=' '&&i!='\n'&&i!='\r'&&i!='\t'&&i!=EOF) break;}c[s++]=i;for(;;){mygc(i);if(i==' '||i=='\n'||i=='\r'||i=='\t'||i==EOF) break;c[s++]=i;}return s;}
void writer(const char c[]){int i;for(i=0;c[i]!='\0';i++)mypc(c[i]);}

int main(){
  int i, j, k, N;
  char in[51][52]; int len[51];
  map<string, int> mp;

  reader(&N);
  rep(i,N) len[i] = reader(in[i]), in[i][len[i]] = '\0';

  j = k = 0;
  rep(i,N){
    if(++mp[(string)in[i]] > k){
      j = i;
      k = mp[(string)in[i]];
    }
  }

  writer(in[j]);
  writer("\n");

  return 0;
}

Current time: 2017年11月18日11時41分29秒
Last modified: 2014年05月24日04時14分17秒 (by laycrs)
Tags: Competitive_Programming AtCoder AtCoder_Beginner_Contest ABC008 ABC_B
トップページに戻る

Logged in as: unknown user (not login)

ログイン: