AOJ2102 Rummy
問題リンク Rummy
- 解法
サイズが小さいので、大きさ3のグループを3つ作るやり方を全通り試します。
全てのグループについてセットの条件を満たすかを調べます。
- ソース
import java.util.Arrays; import java.util.Scanner; //Rummy public class AOJ2102 { int[] a, c; int[][] as; char[] s; boolean dfs(int k){ if(k==9){ for(int i=0;i<3;i++)if(s[as[i][0]]!=s[as[i][1]]||s[as[i][1]]!=s[as[i][2]])return false; for(int i=0;i<3;i++){ int[] t = new int[3]; for(int j=0;j<3;j++)t[j]=a[as[i][j]]; Arrays.sort(t); if(!(t[0]==t[1]&&t[1]==t[2]||t[0]+1==t[1]&&t[1]+1==t[2]))return false; } return true; } for(int i=0;i<3;i++){ if(c[i]==3)continue; as[i][c[i]] = k; c[i]++; if(dfs(k+1))return true; c[i]--; } return false; } void run(){ Scanner sc = new Scanner(System.in); int T = sc.nextInt(); while(T--!=0){ a = new int[9]; s = new char[9]; c = new int[3]; for(int i=0;i<9;i++)a[i]=sc.nextInt(); for(int i=0;i<9;i++)s[i]=sc.next().charAt(0); as = new int[3][3]; System.out.println(dfs(0)?1:0); } } public static void main(String[] args) { new AOJ2102().run(); } }