Hatena::Grouptopcoder

hama_DU@TopCoderへの道

2012-05-01SRM336,SRM337,SRM338 (Practice)

SRM 336 ServiceNames

|  SRM 336 ServiceNames - hama_DU@TopCoderへの道 を含むブックマーク はてなブックマーク -  SRM 336 ServiceNames - hama_DU@TopCoderへの道

http://www.topcoder.com/stat?c=problem_statement&pm=7313

  • ん?問題の意図するところがわからない・・・
    • サンプルから察するにやるだけっぽい
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class ServiceNames {

	class Ret implements Comparable<Ret> {
		String service;
		List<String> items;
		Set<String> done;
		Ret(String a) {
			service = a;
			items = new ArrayList<String>();
			done = new HashSet<String>();
		}
		
		public void add(String item) {
			if (done.contains(item)) {
				return;
			}
			done.add(item);
			items.add(item);
			Collections.sort(items);
		}

		public int compareTo(Ret arg0) {
			return service.compareTo(arg0.service);
		}
		
		public String toString() {
			StringBuffer b = new StringBuffer(service);
			b.append(" ==> " + items.get(0));
			for (int j = 1 ; j < items.size() ; j++) {
				b.append(", ").append(items.get(j));
			}
			return b.toString();
		}
	}
	
	public String[] makeList(String[] services) {
		int len = services.length;
		List<Ret> list = new ArrayList<Ret>();
		Map<String, Ret> servmap = new HashMap<String, Ret>();
		for (int i = 0 ; i < len ; i++) {
			String[] x = services[i].split(" ");
			String item = x[0];
			for (int j = 1 ; j < x.length ; j++) {
				String serv = x[j];
				if (!servmap.containsKey(serv)) {
					servmap.put(serv, new Ret(serv));
					list.add(servmap.get(serv));
				}
				servmap.get(serv).add(item);
			}
		}
		
		Collections.sort(list);
		
		String[] r = new String[list.size()];
		for (int i = 0 ; i < list.size() ; i++) {
			r[i] = list.get(i).toString();
		}
		return r;
	}
}