CodeChef submission 130804 (JAVA) plaintext list. Status: TLE, problem J6, contest NOV09. By abhinava.srivastava (abhinava.srivastava), 2009-11-11 12:55:14.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.StringTokenizer; public class Main { int n; // no of politicians int k; // no of evidences... List<String> resultingStateList = new ArrayList<String>(); int[][] evidences; testcase: for (int count = 0; count < noOfTestCases; count++) { Main main = new Main(); int idx = str.indexOf(' '); main.evidences = new int[main.k][2]; for (int i = 0; i < main.k; i++) { main.evidences[i][0] = x1; main.evidences[i][1] = y1; } if (count != noOfTestCases - 1) in.readLine(); Queue<State> Q = new LinkedList<State>(); for (int p = 0; p < main.n; p++) politiciansStatus += "*"; if (main.n > 0 && main.k == 0) { out.println("MULTIPLE"); continue; } if (main.n == 0) { out.println("UNIQUE"); continue; } Q.add(new State(0, politiciansStatus)); while (!Q.isEmpty()) { State s = Q.remove(); List<State> processesdList = main.process(s); if (!(processesdList.size() == 1 && processesdList.get(0) .equals(State.SENTINEL_STATE))) { for (State a : processesdList) { if (a.noOfEvidencesExcecuted == main.k) { if (!main.resultingStateList.contains(a.state)) { main.resultingStateList.add(a.state); if (main.resultingStateList.size() > 1) { out.println("MULTIPLE"); processesdList = null; main = null; Q = null; continue testcase; } } } else { Q.add(a); } } } processesdList = null; } if (main.resultingStateList.size() == 0) out.println("CONFLICT"); if (main.resultingStateList.size() == 1) { boolean isMultiple = false; if (s.contains("*")) { isMultiple = true; } if (isMultiple) out.println("MULTIPLE"); else out.println("UNIQUE"); } main = null; Q = null; } out.close(); } List<State> processedList = new ArrayList<State>(); State newState1 = null; State newState2 = null; int[] evidence = evidences[state.noOfEvidencesExcecuted]; int a = evidence[0]; int b = evidence[1]; // Case 1: 1st option is true if (state.state.charAt(absValueA) == '*') { newState1 = (State) state.clone(); if (a > 0) { newState1.state = newState1.state.substring(0, absValueA) + "+" + newState1.state.substring(absValueA + 1); } if (a < 0) { newState1.state = newState1.state.substring(0, absValueA) + "-" + newState1.state.substring(absValueA + 1); } } if ((state.state.charAt(absValueA) == '+' && a > 0) || (state.state.charAt(absValueA) == '-' && a < 0)) { newState1 = (State) state.clone(); } if (newState1 != null) { newState1.noOfEvidencesExcecuted++; processedList.add(newState1); } // Case 2: 2nd option is true if (state.state.charAt(absValueB) == '*') { newState2 = (State) state.clone(); if (b > 0) { newState2.state = newState2.state.substring(0, absValueB) + "+" + newState2.state.substring(absValueB + 1); } if (b < 0) { newState2.state = newState2.state.substring(0, absValueB) + "-" + newState2.state.substring(absValueB + 1); } } if ((state.state.charAt(absValueB) == '+' && b > 0) || (state.state.charAt(absValueB) == '-' && b < 0)) { newState2 = (State) state.clone(); } if (newState2 != null && !newState2.isSame(newState1)) { newState2.noOfEvidencesExcecuted++; processedList.add(newState2); } if (processedList.size() == 0) { processedList.add(State.SENTINEL_STATE); } return processedList; } } int noOfEvidencesExcecuted; String state; static State SENTINEL_STATE = new State(-1, null); this.noOfEvidencesExcecuted = noOfEvidencesExcecuted; this.state = state; } State clone = (State) super.clone(); return clone; } public boolean isSame(State state) { if (state == null) return false; int stateLength = this.state.length(); for (int i = 0; i < stateLength; i++) { if (this.state.charAt(i) != state.state.charAt(i)) { return false; } } return true; } }
Comments

