#include <cstdio>
#include <algorithm>
#include <vector>
int main()
{
	int N;
	scanf("%d", &N);
	std::vector<int> counts;
	counts.resize(N + 1);
	
	for (int i = 0; i < N; ++i)
	{
		int t;
		scanf("%d", &t);
		counts[t]++;
	}
	std::sort(counts.begin(), counts.end(), std::greater<int>());
	int result = 0;
	int toConsume = N;
	for (int i = 0; i < N && toConsume; ++i) {
		++result;
		int cnt = counts[i];
		cnt += cnt / 2; // rest;
		toConsume -= std::min(toConsume, cnt);
	}
	printf("%d\n", result);
	return 0;
}
        1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33  | #include <cstdio> #include <algorithm> #include <vector> int main() { int N; scanf("%d", &N); std::vector<int> counts; counts.resize(N + 1); for (int i = 0; i < N; ++i) { int t; scanf("%d", &t); counts[t]++; } std::sort(counts.begin(), counts.end(), std::greater<int>()); int result = 0; int toConsume = N; for (int i = 0; i < N && toConsume; ++i) { ++result; int cnt = counts[i]; cnt += cnt / 2; // rest; toConsume -= std::min(toConsume, cnt); } printf("%d\n", result); return 0; }  | 
            
        
                    English