ColorfulRabbits srm 499 div2 mid

方針

  • 同じ色の兎は同じ答えを返す。
  • ある兎の答えが n の時、その色の兎は丁度 n + 1 匹町の中にいる。

という条件に気を付けて数える。

答案

#include <sstream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
#include <utility>
#include <set>
#include <cctype>
#include <queue>
#include <stack>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <iterator>


using namespace std;


class ColorfulRabbits{
public:
  int getMinimum(vector <int> replies){
    map<int, int> m;
    for(int i = 0; i < (int)replies.size(); i++){
      if(m.find(replies[i]) == m.end()){
	m[replies[i]] = 0;
      }
      m[replies[i]] += 1;
    }


    int ret = 0;
    for(map<int, int>::iterator it = m.begin(); it != m.end(); ++it){
      ret += (it->second / (it->first + 1)) * (it->first + 1);
      ret += it->second % (it->first + 1) ? it->first + 1 : 0;
    }
    return ret;
  }



};