/* * 110108 Australian Voting * * Author: rushed for time teammate * Date: 8/30/2011 * */ import java.io.FileNotFoundException; import java.io.InputStream; import java.io.PrintStream; import java.util.Scanner; class Main { public static void main(String args[]) throws FileNotFoundException { doMain(System.in, System.out); } static void doMain(InputStream in, PrintStream out) { new Solution().main(in, out); } } class Solution { void main(InputStream in, PrintStream out) { Scanner scanner = new Scanner(in); // Read number of cases (elections) to be handled int cases = scanner.nextInt(); scanner.nextLine(); scanner.nextLine(); // Handle each election for (int i = 0; i < cases; i++) { // Read number of candidates and create Election object int c = scanner.nextInt(); scanner.nextLine(); Election election = new Election(c); // Read names of candidates for (int j = 0; j < c; j++) election.setCandidate(j, scanner.nextLine()); // Read ballots; terminate with empty ballot or end of file String sBallot = scanner.nextLine(); int cBallots = 0; while (sBallot.length() > 0) { Scanner scan = new Scanner(sBallot); for (int rank = 0; rank < c; rank++) election.setBallot(cBallots, rank, scan.nextInt() - 1); cBallots++; if (scanner.hasNextLine()) sBallot = scanner.nextLine(); else sBallot = ""; } // Compute the winner(s) and print the results String[] winners = election.computeWinners(); for (int j = 0; j < c; j++) if (winners[j].length() > 0) out.format("%s\n", winners[j]); // Separate each election result with a blank line, but no line at // the end if (i + 1 < cases) out.format("\n"); } } } class Election { private int nCandidates; private String candidates[]; private int nBallots; private int ballots[][]; // ballots[ballot_number][rank] -> candidate at // that rank on that ballot Election(int nCandidates) { this.nCandidates = nCandidates; candidates = new String[nCandidates]; ballots = new int[1000][nCandidates]; nBallots = 0; } // TODO: Fill in details. Sorry, gotta run! }