AOJ0108 Operation of Frequency of Appearance

問題リンク Operation of Frequency of Appearance

  • 解法

タイトルが重々しいですがただのやるだけ問題です。
配列nextを用意して、変換後の数列を格納します。
直前の配列a
と異なる要素が1つも無ければ不動点となります。

  • ソース
import java.util.Scanner;

//Operation of Frequency of Appearance
public class AOJ0108 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(true){
			int n = sc.nextInt();
			if(n==0)break;
			int[] a = new int[n];
			for(int i=0;i<n;i++)a[i]=sc.nextInt();
			int k = 0;
			while(true){
				int[] next = new int[n];
				int[] c = new int[101];
				for(int i:a)c[i]++;
				boolean f = true;
				for(int i=0;i<n;i++){
					next[i]=c[a[i]];
					if(next[i]!=a[i])f = false;
				}
				if(f){
					System.out.print(k+"\n"+a[0]);
					for(int i=1;i<n;i++)System.out.print(" " + a[i]);
					System.out.println();
					break;
				}
				k++;
				a = next;
			}
		}
	}
}