Problem Statement
N people (where N is a power of 2) are taking part in a single-elimination tournament in cheese rolling. The diagram below illustrates the structure of the tournament bracket.
The people entering the tournament are numbered from 0 to N-1.
For each potential cheese rolling match you know who would win the match.
You are given this information encoded as a
There are N! (N factorial) ways to assign the people to positions in the bracket.
Different assignments may produce a different winner of the tournament.
Return a
Definition
- Class:
- CheeseRolling
- Method:
- waysToWin
- Parameters:
- String[]
- Returns:
- long[]
- Method signature:
- long[] waysToWin(String[] wins)
- (be sure your method is public)
Constraints
- N will be between 2 and 16, inclusive.
- N will be a power of 2.
- wins will contain exactly N elements.
- Each element of wins will have a length of exactly N.
- Each element of wins will be composed of the characters 'Y' and 'N'.
- For each i from 0 to N-1, wins[i][i] = 'N'.
- For all distinct integers i and j from 0 to N-1, exactly one of wins[i][j] and wins[j][i] will be 'Y'.
Examples
{"NN", "YN"}
Returns: {0, 2 }
There are 2 ways to assign the players: Player 0 goes to position 0 and player 1 goes to position 1. Player 1 goes to position 0 and player 0 goes to position 1. In both assignments, player 1 will win the match against player 0 because wins[1][0] = 'Y'.
{"NYNY", "NNYN", "YNNY", "NYNN"}
Returns: {8, 0, 16, 0 }
{"NYNYNYNY", "NNYNYNYY", "YNNNNNNN", "NYYNNYNY", "YNYYNYYY", "NYYNNNNN", "YNYYNYNN", "NNYNNYYN"}
Returns: {4096, 8960, 0, 2048, 23808, 0, 1408, 0 }
{"NYNNNNYYNYYNNYNN", "NNNNNNNNNYYNYYNY", "YYNYYNNNNYYYYYYN", "YYNNYYYNYNNYYYNY", "YYNNNYYNYYNNNNYY", "YYYNNNNYYNNYYNYN", "NYYNNYNYNYNYYYYN", "NYYYYNNNYYNYNYYY", "YYYNNNYNNYYYYNNN", "NNNYNYNNNNNNYYNY", "NNNYYYYYNYNYYYNN", "YYNNYNNNNYNNYNNY", "YNNNYNNYNNNNNYNN", "NNNNYYNNYNNYNNYY", "YYNYNNNNYYYYYNNN", "YNYNNYYNYNYNYNYN"}
Returns: {331616878592, 37267079168, 2426798866432, 2606831599616, 994941665280, 1162501849088, 1888166674432, 4632734203904, 832881524736, 84707409920, 3007127748608, 55490052096, 17818550272, 254672666624, 629921447936, 1959311671296 }
{"NYYYYYYYYYYYYYYY", "NNYYYYYYYYYYYYYY", "NNNYYYYYYYYYYYYY", "NNNNYYYYYYYYYYYY", "NNNNNYYYYYYYYYYY", "NNNNNNYYYYYYYYYY", "NNNNNNNYYYYYYYYY", "NNNNNNNNYYYYYYYY", "NNNNNNNNNYYYYYYY", "NNNNNNNNNNYYYYYY", "NNNNNNNNNNNYYYYY", "NNNNNNNNNNNNYYYY", "NNNNNNNNNNNNNYYY", "NNNNNNNNNNNNNNYY", "NNNNNNNNNNNNNNNY", "NNNNNNNNNNNNNNNN"}
Returns: {20922789888000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
Player 0 wins no matter how the positions are assigned, so the answer is 16! = 20922789888000.
{"NYNY","NNNY","YYNN","NNYN"}
Returns: {8, 0, 16, 0 }
{"NNYN","YNNN","NYNN","YYYN"}
Returns: {0, 0, 0, 24 }
{"NNNY","YNNY","YYNN","NNYN"}
Returns: {0, 8, 16, 0 }
{"NNNN","YNNN","YYNY","YYNN"}
Returns: {0, 0, 24, 0 }
{"NNNNNYNN","YNYNYNNY","YNNYNNNN","YYNNNNYY","YNYYNYYY","NYYYNNNN","YYYNNYNN","YNYNNYYN"}
Returns: {0, 6912, 0, 4480, 24576, 1408, 2048, 896 }
{"NNNYYYYY","YNNNNNYN","YYNNYNNN","NYYNYYNY","NYNNNNYY","NYYNYNYN","NNYYNNNY","NYYNNYNN"}
Returns: {22656, 0, 1408, 10240, 384, 2432, 2176, 1024 }
{"NYNYNYNY","NNYNYNYY","YNNNNNNN","NYYNNYNY","YNYYNYYY","NYYNNNNN","YNYYNYNN","NNYNNYYN"}
Returns: {4096, 8960, 0, 2048, 23808, 0, 1408, 0 }
{"NYNYYNYY","NNYNYYYY","YNNYYNNY","NYNNYNYY","NNNNNYYY","YNYYNNNN","NNYNNYNY","NNNNNYNN"}
Returns: {14720, 9088, 7552, 3328, 256, 4864, 512, 0 }
{"NNNNNNYNYYNNNYYN","YNYNYYNYYNYNYNNY","YNNNYNNYYNYYNNYY","YYYNNYYYYYNYNNYY","YNNYNNYYNYYYYYYY","YNYNYNYNYYYYYNNN","NYYNNNNNYYNYYNYN","YNNNNYYNNYNYYNNY","NNNNYNNYNNYNNYNY","NYYNNNNNYNYNYNNY","YNNYNNYYNNNNNYYN","YYNNNNNNYYYNYYYN","YNYYNNNNYNYNNNNN","NYYYNYYYNYNNYNNN","NYNNNYNYYYNNYYNN","YNNNNYYNNNYYYYYN"}
Returns: {30040588288, 2170413056000, 1032712028160, 5360170696704, 6088356921344, 1478110412800, 287463833600, 214525149184, 181157625856, 144355753984, 281618874368, 469078540288, 65955627008, 2059355881472, 435793723392, 623681175552 }
{"NYNNNYYNYYNYYYYN","NNNYYYNYYYYNYNYN","YYNYNYYNNYYYNYYN","YNNNNYYYYNYNYNYN","YNYYNNYYNYYNNNNN","NNNNYNNYYYNYYYNN","NYNNNYNNNNYNNNNY","YNYNNNYNYNNYYYYY","NNYNYNYNNNNYYNNY","NNNYNNYYYNYNNNNN","YNNNNYNYYNNNNYYY","NYNYYNYNNYYNNYYN","NNYNYNYNNYYYNNYY","NYNYYNYNYYNNYNYN","NNNNYYYNYYNNNNNN","YYYYYYNNNYNYNYYN"}
Returns: {1077396144128, 1754904461312, 2746923646976, 1000729870336, 820680032256, 572898705408, 41721626624, 3640348213248, 508378578944, 66093121536, 1050268565504, 553727066112, 1336769675264, 572694822912, 15265202176, 5163990155264 }
{"NNYYNYNYYYNYNYYN","YNNNYYNNYNYYNNNN","NYNNNNYNYNYYYNNN","NYYNYYNYNYYNYNNN","YNYNNNNNNNNYYYNY","NNYNYNNYYNNNNYNN","YYNYYYNYNYNNYYYY","NYYNYNNNNNYNNNYY","NNNYYNYYNNNYNNYN","NYYNYYNYYNYNNYYY","YNNNYYYNYNNNYYNY","NNNYNYYYNYYNNNYY","YYNNNYNYYYNYNNYN","NYYYNNNYYNNYYNYN","NYYYYYNNNNYNNNNN","YYYYNYNNYNNNYYYN"}
Returns: {1667478618112, 233966403584, 530295488512, 824265048064, 443519074304, 23755522048, 6939609366528, 137287663616, 387530915840, 1956016455680, 2303021285376, 2571640471552, 889922322432, 632551800832, 105898541056, 1276030910464 }
{"NYNNNNYYNYYNNYNN","NNNNNNNNNYYNYYNY","YYNYYNNNNYYYYYYN","YYNNYYYNYNNYYYNY","YYNNNYYNYYNNNNYY","YYYNNNNYYNNYYNYN","NYYNNYNYNYNYYYYN","NYYYYNNNYYNYNYYY","YYYNNNYNNYYYYNNN","NNNYNYNNNNNNYYNY","NNNYYYYYNYNYYYNN","YYNNYNNNNYNNYNNY","YNNNYNNYNNNNNYNN","NNNNYYNNYNNYNNYY","YYNYNNNNYYYYYNNN","YNYNNYYNYNYNYNYN"}
Returns: {331616878592, 37267079168, 2426798866432, 2606831599616, 994941665280, 1162501849088, 1888166674432, 4632734203904, 832881524736, 84707409920, 3007127748608, 55490052096, 17818550272, 254672666624, 629921447936, 1959311671296 }
{"NYNYNYNNYNYYYNNY","NNNNYYYYNYNNYNYY","YYNYYYNNNYNNYYYY","NYNNNNYYNNNYYYNN","YNNYNNNNNYYNNYYN","NNNYYNYNYYYNNYYN","YNYNYNNNYNNNNNYN","YNYNYYYNYYYNYYYY","NYYYYNNNNYNYYNNN","YNNYNNYNNNYYYNYN","NYYYNNYNYNNYNNNN","NYYNYYYYNNNNYNNN","NNNNYYYNNNYNNYNY","YYNNNNYNYYYYNNNN","YNNYNNNNYNYYYYNY","NNNYYYYNYYYYNYNN"}
Returns: {885134983168, 1890747416576, 2865795432448, 401523703808, 109519568896, 325261099008, 89119260672, 9766860488704, 565816328192, 261356584960, 260551639040, 1506438381568, 73463922688, 368376709120, 728593498112, 824230871040 }
{"NYYNNNNNYNYNYNNN","NNYYYNNYYNYNYNNY","NNNNNYNYYYNYNNYY","YNYNYYYNYNYYYYNY","YNYNNNYNYYNYYNNY","YYNNYNYNYNNYNNYN","YYYNNNNNYYYYNNYY","YNNYYYYNNYNNNNYY","NNNNNNNYNNNNYYYY","YYNYNYNNYNNNNNNY","NNYNYYNYYYNNNNNN","YYNNNNNYYYYNNNYN","NNYNNYYYNYYYNYYN","YYYNYYYYNYYYNNYY","YYNYYNNNNYYNNNNY","YNNNNYNNNNYYYNNN"}
Returns: {49631068160, 1655057580032, 133099814912, 7316190691328, 415300354048, 258408251392, 443880603648, 1016443240448, 217264652288, 201121333248, 83421855744, 170946330624, 2934036103168, 5560120737792, 440022990848, 27844280320 }
{"NNNNYNNYYNYYNNYY","YNYYNYNNNYNNYNNY","YNNYYYNNYNNNYNNN","YNNNNYYYYNNNYNNY","NYNYNNNNYNYYYNNY","YNNNYNNNNNNYYYNY","YYYNYYNNYNNNYYYY","NYYNYYYNNNNNNYNN","NYNNNYNYNYNNNYNY","YNYYYYYYNNYYNNYN","NYYYNYYYYNNYNNNY","NYYYNNYYYNNNNNYN","YNNNNNNYYYYYNNYN","YYYYYNNNNYYYYNYN","NYYYYYNYYNYNNNNY","NNYNNNNYNYNYYYNN"}
Returns: {460724862976, 441999949824, 97390657536, 463713337344, 401143889920, 294866780160, 3886726414336, 413830643712, 371627622400, 4278679240704, 1388528435200, 527135735808, 932294852608, 5396181647360, 1061146296320, 506799521792 }
{"NYNY","NNNN","YYNY","NYNN"}
Returns: {0, 0, 24, 0 }
{"NYYYYNYY","NNNNNNYN","NYNYYNYY","NYNNYNYY","NYNNNNYN","YYYYYNYY","NNNNNNNN","NYNNYNYN"}
Returns: {0, 0, 0, 0, 0, 40320, 0, 0 }
{"NNNNNNNNNNNNNNNN","YNNNNNYYYNYNYNNY","YYNNNNYYYNYYYNNY","YYYNYYYYYNYYYNNY","YYYNNYYYYNYYYNNY","YYYNNNYYYNYYYNNY","YNNNNNNNNNYNNNNN","YNNNNNYNYNYNNNNN","YNNNNNYNNNYNNNNN","YYYYYYYYYNYYYNNY","YNNNNNNNNNNNNNNN","YYNNNNYYYNYNYNNY","YNNNNNYYYNYNNNNN","YYYYYYYYYYYYYNNY","YYYYYYYYYYYYYYNY","YNNNNNYYYNYNYNNN"}
Returns: {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20922789888000, 0 }
{"NN","YN"}
Returns: {0, 2 }
{"NNNNYNNN","YNYNNYYN","YNNNNYYN","YYYNNYNN","NYYYNNNN","YNNNYNYN","YNNYYNNN","YYYYYYYN"}
Returns: {0, 0, 0, 0, 0, 0, 0, 40320 }
{"NNNYNYYNNYNYYYNN","YNNYYNYNNNNYNYNN","YYNNNYNYNNNYYYNN","NNYNYYYYNYNYYNNN","YNYNNYNYNYNYYYNN","NYNNNNYNNYNYNNNN","NNYNYNNYNNYYYNYN","YYNNNYNNYNNNYYYN","YYYYYYYNNYYYYNNN","NYYNNNYYNNNYNNYN","YYYYYYNYNYNNYYNN","NNNNNNNYNNYNYYNN","NYNNNYNNNYNNNYYN","NNNYNYYNYYNNNNNN","YYYYYYNNYNYYNYNN","YYYYYYYYYYYYYYYN"}
Returns: {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20922789888000 }
{"NYYYYYYYYYYYYYYY", "NNYYYYYYYYYYYYYY", "NNNYYYYYYYYYYYYY", "NNNNYYYYYYYYYYYY", "NNNNNYYYYYYYYYYY", "NNNNNNYYYYYYYYYY", "NNNNNNNYYYYYYYYY", "NNNNNNNNYYYYYYYY", "NNNNNNNNNYYYYYYY", "NNNNNNNNNNYYYYYY", "NNNNNNNNNNNYYYYY", "NNNNNNNNNNNNYYYY", "NNNNNNNNNNNNNYYY", "NNNNNNNNNNNNNNYY", "NNNNNNNNNNNNNNNY", "NNNNNNNNNNNNNNNN" }
Returns: {20922789888000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
{"NYNY", "NNYN", "YNNY", "NYNN" }
Returns: {8, 0, 16, 0 }
{"NYNNNNYYNYYNNYNN", "NNNNNNNNNYYNYYNY", "YYNYYNNNNYYYYYYN", "YYNNYYYNYNNYYYNY", "YYNNNYYNYYNNNNYY", "YYYNNNNYYNNYYNYN", "NYYNNYNYNYNYYYYN", "NYYYYNNNYYNYNYYY", "YYYNNNYNNYYYYNNN", "NNNYNYNNNNNNYYNY", "NNNYYYYYNYNYYYNN", "YYNNYNNNNYNNYNNY", "YNNNYNNYNNNNNYNN", "NNNNYYNNYNNYNNYY", "YYNYNNNNYYYYYNNN", "YNYNNYYNYNYNYNYN" }
Returns: {331616878592, 37267079168, 2426798866432, 2606831599616, 994941665280, 1162501849088, 1888166674432, 4632734203904, 832881524736, 84707409920, 3007127748608, 55490052096, 17818550272, 254672666624, 629921447936, 1959311671296 }