View Code of Problem 21

import java.util.*;
import java.io.*;
public class Main {	
	static String line = "YX2AKQJT9876543";
	static String one = "one";
	static String two = "two";
	static String three = "three";
	static String four = "four";
	static String threewithone = "threewithone";
	static String threewithtwo = "threewithtwo";
	static String fourwithtwo = "fourwithtwo";
	static String boom = "boom";
	static String Yes = "Yes";
	static String No = "No";
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		for(int i =0;i<n;i++) {
			ArrayList<String> card1 = new ArrayList<String>(Arrays.asList(br.readLine().split("")));		
			ArrayList<String> card2 = new ArrayList<String>(Arrays.asList(br.readLine().split("")));
			System.out.println(battle(card1,card2,""));
		}
	}
	public static String battle(ArrayList<String> card1,ArrayList<String> card2,String a) {
		ArrayList<String> choise = new ArrayList<String> ();
		ArrayList<String> cardlist = new ArrayList<String>(Arrays.asList(a.split("")));
		if(a.length()==0) {
			choise = makechoise(card1,"");
		}else {
			if(cardlist.size()==1) {
				choise = makechoise(card1,one);
			}else if(cardlist.size()==2) {
				choise = makechoise(card1,two);
			}else if(cardlist.size()==3) {
				choise = makechoise(card1,three);
			}else if(cardlist.size()==4 && ifthreewithone(cardlist)) {
				choise = makechoise(card1,threewithone);
			}else if(cardlist.size()==4 && ifboom(cardlist)) {
				choise = makechoise(card1,boom);
			}else if(cardlist.size()==5 && ifthreewithone(cardlist)) {
				choise = makechoise(card1,threewithtwo);
			}else if(cardlist.size()==6 && iffourwithtwo(cardlist)) {
				choise = makechoise(card1,fourwithtwo);
			}
		}
		if(a.length()==0) {
			String result;
			for(String s :choise) {
				chupai(card1,s);
				if(card1.size()==0) {
					huipai(card1,s);
					return Yes;
				}
				result = battle(card2,card1,s);
				huipai(card1,s);
				if(result.equals(Yes)) {
					continue;
				}else {
					return Yes;
				}
			}
		}else {
			int loc1 ;
			int loc2 ;
			String result;
			for(String s :choise) {
				loc1 = line.indexOf(s.charAt(0));
				loc2 = line.indexOf(a.charAt(0));
				if(loc1<loc2) {
					chupai(card1,s);
					if(card1.size()==0) {
						huipai(card1,s);
						return Yes;
					}
					result = battle(card2,card1,s);
					huipai(card1,s);
					if(result.equals(Yes)) {
						continue;
					}else {
						return Yes;
					}
				}else {
					continue;
				}
			}
		}
		String result = battle(card2,card1,"");
		if(result.equals(Yes)) {
			return No;
		}else {
			return Yes;
		}
	}
	public static ArrayList<String> huipai(ArrayList<String> card,String s){
		for(int i =0;i<s.length();i++) {
			card.add(String.valueOf(s.charAt(i)));
		}
		Collections.sort(card);
		return card;
	}
	
	public static ArrayList<String> chupai(ArrayList<String> card,String s){
		for(int i =0;i<s.length();i++) {
			card.remove(String.valueOf(s.charAt(i)));
		}
		return card;
	}
	public static boolean ifone(ArrayList<String> card) {
		if(card.size()>=1) {
			return true;
		}else {
			return false;
		}
	}
	
	public static boolean iftwo(ArrayList<String> card) {
		if(card.size()>=2) {
			for(int i =0;i<card.size();i++) {
				try {
					if(card.get(i).equals(card.get(i+1))) {
						return true;
					}
				}catch(Exception ex) {	
				}
			}
		}
		return false;
	}
	
	public static boolean ifthree(ArrayList<String> card) {
		if(card.size()>=3) {
			for(int i =0;i<card.size();i++) {
				try {
					if(card.get(i).equals(card.get(i+1)) && card.get(i).equals(card.get(i+2))) {
						return true;
					}
				}catch(Exception ex) {	
				}
			}
		}
		return false;
	}
	
	public static boolean ifthreewithone(ArrayList<String> card) {
		if(card.size()>=4) {
			for(int i =0;i<card.size();i++) {
				try {
					if(card.get(i).equals(card.get(i+1)) && card.get(i).equals(card.get(i+2))) {
						for(int j =0;j<card.size();j++) {
							if(!(card.get(j).equals(card.get(i)))) {
								return true;
							}
						}
					}
				}catch(Exception ex) {	
				}
			}
		}
		return false;	
	}
	
	public static boolean ifthreewithtwo(ArrayList<String> card) {
		if(card.size()>=5) {
			for(int i =0;i<card.size();i++) {
				try {
					if(card.get(i).equals(card.get(i)) && card.get(i).equals(card.get(i+2))) {
						for(int j =0;j<card.size();j++) {
							if(card.get(j).equals(card.get(j+1)) && !(card.get(j).equals(card.get(i)))) {
								return true;
							}
						}
					}
				}catch(Exception ex) {	
				}
			}
		}
		return false;	
	}
	
	public static boolean iffourwithtwo(ArrayList<String> card) {
		if(card.size()>=6) {
			for(int i =0;i<card.size();i++) {
				try {
					if(card.get(i).equals(card.get(i+1)) && card.get(i).equals(card.get(i+2)) && card.get(i).equals(card.get(i+3))) {
						return true;
					}
				}catch(Exception ex) {	
				}
			}
		}
		return false;	
	}
	
	public static boolean ifboom(ArrayList<String> card) {
		if(card.size()>=4) {
			for(int i =0;i<card.size();i++) {
				try {
					if(card.get(i).equals(card.get(i+1)) && card.get(i).equals(card.get(i+2)) && card.get(i).equals(card.get(i+3))) {
						return true;
					}
				}catch(Exception ex) {	
				}
			}
		}
		return false;	
	}
	
	public static boolean ifsuperboom(ArrayList<String> card) {
		if(card.size()>=2) {
			boolean ifx = false;
			boolean ify = false;
			for(int i =0;i<card.size();i++) {
				if(card.get(i).equals("X")) {
					ifx = true;
				}
				if(card.get(i).equals("Y")) {
					ify = true;
				}
			}
			if(ifx && ify) {
				return true;
			}
		}
		return false;	
	}
	
	public static ArrayList<String> makechoise(ArrayList<String> card0,String mode) {
		StringBuffer sb = new StringBuffer();
		ArrayList<String> choise = new ArrayList<String>();
		if(mode.equals(one)) {
			for(int i =0;i<card0.size();i++) {
				if(!choise.contains(card0.get(i))) {
					choise.add(card0.get(i));
				}
			}
		}else if(mode.equals(two)) {
			ArrayList<String> card = (ArrayList<String>)card0.clone();
			int loc=0;
			while(iftwo(card)) {
				try {
					if(card.get(loc).equals(card.get(loc+1))) {
						if(!choise.contains(card.get(loc)+card.get(loc))) {
							sb.delete(0,sb.length());
							sb.append(card.get(loc));
							sb.append(card.get(loc));
							String s = sb.toString();
							choise.add(s);
						}
						card.remove(loc);
						card.remove(loc);
						loc=-1;
					}
				}catch(Exception ex) {	
				}finally{
					loc++;
				}
			}
		}else if(mode.equals(three)) {
			ArrayList<String> card = (ArrayList<String>)card0.clone();
			int loc=0;
			while(ifthree(card)) {
				try {
					if(card.get(loc).equals(card.get(loc+1)) && card.get(loc).equals(card.get(loc+2))) {
						sb.delete(0,sb.length());
						sb.append(card.get(loc));
						sb.append(card.get(loc));
						sb.append(card.get(loc));
						String s = sb.toString();
						choise.add(s);
						card.remove(loc);
						card.remove(loc);
						card.remove(loc);
						loc=-1;
					}
				}catch(Exception ex) {	
				}finally{
					loc++;
				}
			}
		}else if(mode.equals(threewithone)) {
			if(ifthreewithone(card0)) {
				ArrayList<String> copy  =(ArrayList<String>)card0.clone();
				for(int i =0;i<card0.size();i++) {
					try {
						if(card0.get(i).equals(card0.get(i+1)) && card0.get(i).equals(card0.get(i+2))) {
							sb.delete(0,sb.length());
							sb.append(card0.get(i));
							sb.append(card0.get(i));
							sb.append(card0.get(i));
							String s = sb.toString();
							String body = card0.get(i);
							copy.remove(i);
							copy.remove(i);
							copy.remove(i);
							for(int j =0;j<copy.size();j++) {
								sb.delete(0,sb.length());
								sb.append(s);
								sb.append(copy.get(j));
								String s1=sb.toString();
								if(!(copy.get(j).equals(body))) {
									if(choise.contains(s1)) {
										continue;
									}								
									choise.add(s1);
								}
							}
							copy.clear();
							for(int j =0;j<card0.size();j++) {
								copy.add(card0.get(j));
							}
						}
					}catch(Exception ex) {		
					}
				}
			}
		}else if(mode.equals(threewithtwo)) {
			if(ifthreewithtwo(card0)) {
				ArrayList<String> copy  =(ArrayList<String>)card0.clone();
				for(int i =0;i<card0.size();i++) {
					try {
						if(card0.get(i).equals(card0.get(i+1)) && card0.get(i).equals(card0.get(i+2))) {
							sb.delete(0,sb.length());
							sb.append(card0.get(i));
							sb.append(card0.get(i));
							sb.append(card0.get(i));
							String s = sb.toString();
							String body = card0.get(i);
							copy.remove(i);
							copy.remove(i);
							copy.remove(i);
							for(int j =0;j<copy.size();j++) {
								try {
									if(copy.get(j).equals(copy.get(j+1)) && (!copy.get(j).equals(body))) {
										sb.delete(0,sb.length());
										sb.append(s);
										sb.append(copy.get(j));
										sb.append(copy.get(j));
										String s1=sb.toString();
										if(choise.contains(s1)) {
											continue;
										}
										choise.add(s1);
									}
								}catch(Exception ex) {		
								}
							}
							copy.clear();
							for(int j =0;j<card0.size();j++) {
								copy.add(card0.get(j));
							}
						}
					}catch(Exception ex) {		
					}
				}
			}
		}else if(mode.equals(fourwithtwo)) {
			if(iffourwithtwo(card0)) {
				ArrayList<String> copy  =(ArrayList<String>)card0.clone();
				for(int i =0;i<card0.size();i++) {
					try {
						if(card0.get(i).equals(card0.get(i+1)) && card0.get(i).equals(card0.get(i+2)) && card0.get(i).equals(card0.get(i+3))) {
							sb.delete(0,sb.length());
							sb.append(card0.get(i));
							sb.append(card0.get(i));
							sb.append(card0.get(i));
							sb.append(card0.get(i));
							String s = sb.toString();
							String body = card0.get(i);
							copy.remove(i);
							copy.remove(i);
							copy.remove(i);
							copy.remove(i);
							StringBuffer sb2 = new StringBuffer();
							for(int j =0;j<copy.size();j++) {
								if(!copy.get(j).equals(body)) {
									String first = copy.get(j);
									ArrayList<String> copycopy  =(ArrayList<String>)copy.clone();
									copycopy.remove(j);
									for(int l =0;l<copycopy.size();l++) {
										if(!copycopy.get(l).equals(body)) {
											sb.delete(0,sb.length());
											sb2.delete(0,sb.length());
											sb.append(s);
											sb.append(first);
											sb.append(copycopy.get(l));
											String s1=sb.toString();
											sb2.append(s);
											sb2.append(copycopy.get(l));
											sb2.append(first);
											String s2=sb.toString();
											if(!choise.contains(s1) && !choise.contains(s2)) {
												choise.add(s1);
											}
										}
									}
									copycopy.clear();
									for(int l =0;l<copy.size();l++) {
										copycopy.add(copy.get(l));
									}
								}
							}
							copy.clear();
							for(int j =0;j<card0.size();j++) {
								copy.add(card0.get(j));
							}
						}
					}catch(Exception ex) {		
					}
				}
			}
		}else if(mode.equals(boom)) {
			ArrayList<String> card = (ArrayList<String>)card0.clone();
			int loc=0;
			while(ifboom(card)) {
				try {
					if(card.get(loc).equals(card.get(loc+1)) && card.get(loc).equals(card.get(loc+2)) && card.get(loc).equals(card.get(loc+3))) {
						sb.delete(0,sb.length());
						sb.append(card.get(loc));
						sb.append(card.get(loc));
						sb.append(card.get(loc));
						sb.append(card.get(loc));
						String s = sb.toString();
						choise.add(s);
						card.remove(loc);
						card.remove(loc);
						card.remove(loc);
						card.remove(loc);
						loc=-1;
					}
				}catch(Exception ex) {	
				}finally{
					loc++;
				}
			}				
		}else {
			ArrayList<ArrayList<String>> choiseall =new ArrayList<ArrayList<String>>();
			choiseall.add(makechoise(card0,one));
			choiseall.add(makechoise(card0,two));
			choiseall.add(makechoise(card0,three));
			choiseall.add(makechoise(card0,threewithone));
			choiseall.add(makechoise(card0,threewithtwo));
			choiseall.add(makechoise(card0,fourwithtwo));
			choiseall.add(makechoise(card0,boom));
			for(ArrayList<String> i :choiseall) {
				for(String j : i) {
					choise.add(j);
				}
			}
		}
		if(ifsuperboom(card0)) {
			choise.add("YX");
		}
		return choise;
	}
}

Double click to view unformatted code.


Back to problem 21