Codeforces #34 (div2) C "Page Numbers"

問題:http://codeforces.com/contest/34/problem/C

ラクティス.
コンマで区切られた数字を1回ずつ昇順出力するが,連続する数字はハイフンを使ってまとめて出力する.

本番では連続する数字が3つ以上にだけハイフンを入れると勝手に勘違いしてテストケース12でWA.


ラクティス提出コード

import java.util.*;

public class C_PageNumbers {
	public static void main(String[] args) {
		Set<Integer> set = new TreeSet<Integer>();
		for (String str : new Scanner(System.in).nextLine().split(",")) {
			set.add(new Integer(str));
		}
		List<Integer> li = new ArrayList<Integer>(set);
		List<String> res = new ArrayList<String>();
		res.add("" + li.get(0));
		boolean chn = false;
		for (int i = 1; i < li.size(); ++i) {
			if (li.get(i - 1) == li.get(i) - 1) {
				if (!chn) res.add("-");
				chn = true;
			} else {
				if (chn) res.add("" + li.get(i - 1));
				res.add("" + li.get(i));
				chn = false;
			}
		}
		if (chn) {
			res.add("" + li.get(li.size() - 1));
		}
		System.out.println(res.toString().replaceAll("[\\[\\] ]", "")
				.replaceAll(",-,", "-"));

	}
}

本番提出コード(3つ以上のみハイフンを付ける)

import java.util.*;
public class C_PageNumber {
public static void main(String[] args) {
        Set<Integer>set=new TreeSet<Integer>();
        for(String str : new Scanner(System.in).nextLine().split(",")){
                set.add(new Integer(str));
        }
        List<Integer> list = new ArrayList<Integer>(set);
        List<String> result = new ArrayList<String>();
        result.add(""+list.get(0));
        for(int i=0;i<list.size()-2;++i){
                boolean b = true;
                for(int l=0;l<2;++l){
                        if(list.get(i+l)!=list.get(i+l+1)-1){
                                b=false;
                                break;
                        }
                }
                if(b){
                        if(!result.get(result.size()-1).equals("-")){
                                result.add("-");
                        }
                }else{
                        result.add(""+list.get(i+1));
                }
        }
        result.add(""+list.get(list.size()-1));
        System.out.println(result.toString().replaceAll("[\\[\\] ]","").replaceAll(",-,","-"));
        
}
}