Topcoder SRM 211 div2 900 "grafixGlobs"

問題:http://www.topcoder.com/stat?c=problem_statement&pm=2999(要ログイン)

ラクティス.

コマンドのリストと数字が与えられるので,コマンド実行結果の数字のインデックスのデータを求める.コマンドはmake, delete, merge, splitで与えられ,それぞれ「何も入っていない一番最初のデータに引数のオブジェクトを作成する」,「引数のインデックスのデータを削除する」,「第一引数のインデックスのデータに第二引数のインデックスのデータを追加し第二引数のインデックスのデータを削除する」,「引数のインデックスのデータに含まれるオブジェクト群を,何も入ってないデータ部分にarc, circle, polygonの順で一つずつ分割して挿入する」ことを表す.

単にそれぞれのコマンドごとの処理を記述する.

import java.util.*;

public class grafixGlobs {

	public int[] execute(String[] commands, int sel) {
		List<String> blobs = Arrays.asList("arc", "circle", "polygon");
		List<Integer>[] objs = new ArrayList[commands.length];
		for(int i = 0; i < objs.length;++i){
			objs[i] = new ArrayList<Integer>();
		}
		for (String com : commands) {
			if (com.startsWith("make")) {
				int j = 0;
				for(;objs[j].size() > 0; ++j);
				objs[j].add(blobs.indexOf(com.split(" ")[1]));
			} else if (com.startsWith("delete")) {
				objs[new Integer(com.split(" ")[1])].clear();
			} else if (com.startsWith("merge")) {
				String[] sp = com.split(" ");
				int a = new Integer(sp[1]), b = new Integer(sp[2]);
				objs[a].addAll(objs[b]);
				objs[b].clear();
			} else {
				int a = new Integer(com.split(" ")[1]);
				List<Integer> list = new ArrayList<Integer>(objs[a]);
				Collections.sort(list);
				objs[a].clear();
				int j = 0;
				for (int obj : list) {
					for (; objs[j].size() > 0; ++j)
						;
					objs[j].add(obj);
				}
			}
		}
		int[] result = new int[blobs.size()];
		
		if (sel > objs.length || objs[sel].size() < 1) {
			return new int[]{};
		}else{
			for (int obj : objs[sel]) {
				++result[obj];
			}
		}
		return result;
	}
}