0108 - Operation of Frequency of Appearance

#include <algorithm>
#include <iostream>
using namespace std;

void Slove(int n)	{
	int P[12], S[12], min_count=0, k;

	for (int k=0; k<n; ++k)
		cin >> S[k];
	while (true)	{
		fill(P,P+12,0);
		for (int i=0; i<n; ++i)
			for (int j=0; j<n; ++j)
				if (S[i] == S[j])	++P[i];
		for (k=0; k<n; ++k)
			if (P[k] != S[k])	break;
		if (k == n)	break;
		for (int i=0; i<12; ++i)
			S[i]=P[i];
		++min_count;
	}
	cout << min_count << endl;
	for (k=0; k<n; ++k)	{
		cout << P[k];
		(k==n-1)? cout << endl : cout << " ";
	}
}

int main(void)	{
	int n;

	while (cin >> n && n)
		Slove(n);
	return 0;
}

やるだけなんですな。。