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(",-,","-")); } }