horiuchi #5547(2008/01/29 06:38 GMT) [ Java ] Rating0/0=0.00
なるべくSetを使うようにしてみました。入力値のチェックが甘いのは仕様です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class Sample141 { public final int a; public final int b; public final int c; private final Set<Integer> accepted_ = new HashSet<Integer>(); private final List<List<Integer>> noGood_ = new ArrayList<List<Integer>>(); public Sample141(int a, int b, int c) { this.a = a; this.b = b; this.c = c; } public void addTestResult(final int i, final int j, final int k, int r) { if (r == 0) { noGood_.add(new ArrayList<Integer>() {{add(i); add(j); add(k);}}); } else { accepted_.add(i); accepted_.add(j); accepted_.add(k); } } public int[] calc() { Set<Integer> rejected = checkRejected(); int[] result = new int[a + b + c]; for (int index = 0; index < result.length; index++) { if (accepted_.contains(index + 1)) { result[index] = 1; // OK } else if (rejected.contains(index + 1)) { result[index] = 0; // NG } else { result[index] = 2; // UnKnown } } return result; } private Set<Integer> checkRejected() { Set<Integer> rejected = new HashSet<Integer>(); for (List<Integer> list: noGood_) { for (Integer integer: list.toArray(new Integer[0])) { if (accepted_.contains(integer)) { list.remove(integer); } } if (list.size() == 1) { rejected.addAll(list); } } return rejected; } public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try { String[] counts = reader.readLine().split("\\s"); Sample141 sample = new Sample141(Integer.parseInt(counts[0]), Integer.parseInt(counts[1]), Integer.parseInt(counts[2])); int n = Integer.parseInt(reader.readLine()); for (int index = 0; index < n; index++) { String[] test = reader.readLine().split("\\s"); sample.addTestResult(Integer.parseInt(test[0]), Integer.parseInt(test[1]), Integer.parseInt(test[2]), Integer.parseInt(test[3])); } int[] result = sample.calc(); for (int res: result) { System.out.println(res); } } catch (IOException ex) { ex.printStackTrace(); } } }
Rating0/0=0.00-0+
[ reply ]
horiuchi
#5547()
[
Java
]
Rating0/0=0.00
なるべくSetを使うようにしてみました。入力値のチェックが甘いのは仕様です。
Rating0/0=0.00-0+
[ reply ]