TopcoderArchiveVisit Topcoder
SRM13 Oct 2007
SRM 371

CondorcetVoting

Problem statement, definition, constraints, and public examples.

Problem Statement

One approach to voting is to have voters assign a rank to each candidate. Candidate A is preferred to candidate B if there are more voters who rank A ahead of B than there are voters who rank B ahead of A. A Condorcet winner is a candidate which is preferred to all other candidates. There can be at most one Cordorcet winner in an election, but there might also be none.

You will be given a String[] votes. The jth character of the ith element of votes is a lowercase letter, indicating the ranking that voter i assigned to candidate j. Letters closer to 'a' indicate higher-ranked (preferred) candidates, while those closer to 'z' are lower-ranked (less preferred). Return the 0-based index of the Cordorcet winner, or -1 if there isn't one.

Definition

Class:
CondorcetVoting
Method:
winner
Parameters:
String[]
Returns:
int
Method signature:
int winner(String[] votes)
(be sure your method is public)

Constraints

  • votes will contain between 1 and 50 elements, inclusive.
  • Each element of votes will contain between 1 and 50 characters, inclusive.
  • Each element of votes will contain the same number of characters.
  • Each element of votes will contain only lowercase letters ('a' - 'z').

Examples

  1. {"acbd",
     "bacd",
     "bdca"}
    Returns: 0
    Voters 0 and 2 ranked candidate 0 higher than candidate 1, while voter 1 ranked candidate 1 higher than candidate 0. Therefore, candidate 0 is preferred to candidate 1. All three voters ranked candidate 0 higher than candidate 2, so candidate 0 is preferred to candidate 2. Finally, voters 0 and 1 ranked candidate 0 higher than candidate 3, while only voter 2 ranked candidate 3 higher than candidate 0. Therefore, candidate 0 is preferred to candidate 3 as well.
  2. {"abc", 
     "bca", 
     "cab"}
    Returns: -1
    This is a classic example of a cyclic preference. Two voters prefer 0 to 1, two prefer 1 to 2, and two prefer 2 to 0. There is no Condorcet winner.
  3. {"cezdqcw"}
    Returns: -1
    Even with only one voter, there may be no Condorcet winner because of a simple tie.
  4. {"abcd", "abcd", "abcd", "abcd", "abcd", "abcd",
     "cbad", "cbad", "cbad", "cbad", "cbad",
     "dbca", "cbda", "cbda"}
    Returns: 1
    Candidate 1 is nobody's first choice, but still wins.
  5. {"abbcbbbaaccaaccbbacbbbaacbccbccacaaacaacaaacbccaac",
     "accbabcaacacbcccbbccbbcaccccccbbcbbcbaccbcbcacbcbc",
     "acacaaabccaaaccabbaaaacabaaabacacbaacbcccbccbcbacb",
     "acbcbabaabbcaababaacbabcacbaccabbaaacccbcabbbcacba",
     "cbbbacbbacccbbabbbcbaabaaaacaacbcbccbaaccbcaaccbcb",
     "cbacbbcbbcbcaaabccabcabbcbacaaabccabbcbacbbacbbaca",
     "cacaabccbbbaaacccacbbcacababbcaaabccbbacbbbccacbaa",
     "bccbbabaaaababcbabbbbcbcacbcbcbacccacacacacacacaab",
     "bccabcaabcabbccaaccbcabaaabbbcaabaaabbbbabbbaabaac",
     "accccbabaaaabcbacabbcbbacaacaaaacccbbbcacaccccaaac",
     "cccbcaababbaacaaabbbaabbccccacaacbacaacbbbaacccbbb",
     "bccccaccbcbbaaaaaaaaccbababcabaaccacbbabbbcabbaaca",
     "cbacacaabbccacaabbbbbbccabcbbaccacbcacacacbccbcbcc",
     "baabcabccaaaaccbaacaaccacccbcbbaaacacaccbcaacbbbba",
     "bccaaaabcbbcbbbbbcaabaacccbccbbcbabacaaccbccaababb",
     "cacbbbbcabbcbaabbccbaccbaacbbcbbbbcabababccabbbcab",
     "bccbcacbccaacacccccaacabacbacbbbcaabacacccbbbccaac",
     "aaaccbbbacacbaaaacacaabbaacccbcccbcabbccbcacabbacb",
     "bcabcbbacbacacbbaaccabcabcbbaabacacccbbbcabbbcaacb",
     "bacbbbbaccbaabbbbbcaccbbcbcabbbccbcacccbabbbcaaacc",
     "bababcacbacacacccccbbcacccbbcbccaccaacbbcacabcabba",
     "aaabaccbbcacaacbabccccabbbcbcccccccbaacbccbaacbbbc",
     "abacbaaaaaccacbbbaccbbbabaacbcbccacccabaaaacbaabbb",
     "cbbcacbaccabbbcaacbcbabbcabcbaccabcbbbcabcbcbaacca",
     "babbacaaacbbcbbbabbaabcbabcbbaacaacbbbaaaabbcabcca",
     "cbabaacabcccaabbbacccaccbacabbaacaaabcbcccbcbcccaa",
     "aabbbcbacabbcabcbcccbccaccbcacbaacabbbccaabaabcbba",
     "caccabcccabbaacbabbaaaccccccccaaccbcaccacaabacccba",
     "bbbcabcababaabacaccacabcbccacccbbbbcbbbaccabcabaab",
     "bbbcaababbbbababababcbbbbaaabbacaabcacbbccbcaaaaaa",
     "bcbacccaaaabbcbcabbbcababbcacaabbbbcbbacbaabcbaccb",
     "bbcaccaaccacbbaaccaaaabccbbacbcbacaacbacbccaaccbba",
     "abaaacbccbbabbcaccbaccccbaaacaccccababcbccccbabcca",
     "acccaccababababacbbaccbcabcaccbabaabacbaacaaacabca",
     "aaabababccabccbcbabcabcacbbcacbcbbbabcabacbcaacacb",
     "ccacbaabbcbaccaccbbabbabbabaacccabcaaccacacccbbcab",
     "bbaabcbabbbaacacabaabcbaaabacbccccaccaaaacbacabbbc",
     "abaaaccaacbbcacacbcbccbaaacbbcbacabbbccabbbccaaaac",
     "bbacbabbcacbbacccaccbcbcabbcbaacabbbbabbaaabaacacb",
     "cacbacbccbcbabacccacabcacacabbcabbccaacacbaaacaacb",
     "bacbbacbccccabcbabcbbcbacacaaabcbaccccaabaabbacbcb",
     "abcaaccccabccaaaaccbabccacbcaaaacaccaccccccaaaabaa",
     "bacabcbccbacccbaaaabcbbaabbabaabcabacccbcabacccbcc",
     "babaccbbcbcbacccabccbcccbaaaaacccabcbccbbbbcbabcbc",
     "cccbbaccbabbbbcbcbcbaaacbbcacbcaacacacccbcabccbcaa",
     "caacbcacbccaaaaacaaababbcccacbabaaabcaacaaababacba",
     "cccccaccabcaacababbacbcbabbcaacbacbabbbccbabcbabbb",
     "ccbcababcabcbcccaccccacabcbaaacaabccbbaabaccbaccab",
     "abbbcacaccabcbccbacabbbccaccaaaacccabbcbacbbccabcb",
     "bacabccabcbbcaacbcacabcbccacbcccbcbcaaaabbaabccabb"}
    Returns: 12
  6. {"h", "e", "l", "l", "o"}
    Returns: 0
Back to all problems