Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- public class FiveHundredEleven {
- private void go(int memory, int played){
- if (memo[memory][played] != 0) {
- return;
- }
- int remaining = initialState.length - played;
- for (int current : initialState){
- if ((memory != (memory | current))){
- remaining--;
- if ((memory | current) == 511) {
- continue;
- }
- go(memory | current, played + 1);
- if (memo[memory | current][played + 1] == 1){
- memo[memory][played] = 2;
- return;
- }
- }
- }
- if (remaining != 0){
- go(memory, played + 1);
- if (memo[memory][played + 1] == 1){
- memo[memory][played] = 2;
- return;
- }
- }
- memo[memory][played] = 1;
- return;
- }
- public String theWinner(int[] cards) {
- int total = 0;
- for (int cur: cards){
- total |= cur;
- }
- if (total < 511){
- return cards.length % 2 == 1 ? "Fox Ciel" : "Toastman";
- }
- initialState = cards.clone();
- memo = new int [1 << 9][cards.length + 1];
- go(0,0);
- return memo[0][0] == 2? "Fox Ciel" : "Toastman";
- }
- private static int []initialState;
- private static int [][]memo;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement