結果

問題 No.334 門松ゲーム
ユーザー nCk_cvnCk_cv
提出日時 2016-02-04 21:06:39
言語 Java21
(openjdk 21)
結果
AC  
実行時間 207 ms / 2,000 ms
コード長 2,648 bytes
コンパイル時間 2,399 ms
コンパイル使用メモリ 80,196 KB
実行使用メモリ 43,608 KB
最終ジャッジ日時 2024-09-21 20:32:37
合計ジャッジ時間 6,188 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 177 ms
42,604 KB
testcase_01 AC 139 ms
41,300 KB
testcase_02 AC 165 ms
42,168 KB
testcase_03 AC 171 ms
42,444 KB
testcase_04 AC 161 ms
42,188 KB
testcase_05 AC 173 ms
42,256 KB
testcase_06 AC 183 ms
42,816 KB
testcase_07 AC 164 ms
41,780 KB
testcase_08 AC 184 ms
42,608 KB
testcase_09 AC 170 ms
41,576 KB
testcase_10 AC 198 ms
42,608 KB
testcase_11 AC 207 ms
43,608 KB
testcase_12 AC 179 ms
42,872 KB
testcase_13 AC 172 ms
42,468 KB
testcase_14 AC 204 ms
42,788 KB
testcase_15 AC 191 ms
42,564 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import java.util.*;
import java.math.*;
import java.io.*;
 
public class Main {
	static int[] ret = new int[3];
	static int[] k;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		k = new int[n];
		for(int i = 0; i < n; i++) {
			k[i] = sc.nextInt();
		}
		boolean ret = dfs(n,new boolean[n],true);
		if(ret) {
			System.out.println(Main.ret[0] + " " + Main.ret[1] + " " + Main.ret[2]);
		}
		else {
			System.out.println(-1);
		}
	}
	static boolean dfs(int a, boolean[] use, boolean t) {
		if(a == 0)  return !t;
		if(a == use.length) {
			int[] ret = new int[3];
			for(int i = 0; i < use.length; i++) {
				ret[0] = i;
				for(int j = i+1; j < use.length; j++) {
					ret[1] = j;
					for(int k = j+1; k < use.length; k++) {
						int[] tes = new int[3];
						tes[0] = Main.k[i];
						tes[1] = Main.k[j];
						tes[2] = Main.k[k];
						Arrays.sort(tes);
						if(tes[1] == Main.k[j]) continue;
						ret[2] = k;
						use[i] = true;
						use[j] = true;
						use[k] = true;
						if(dfs(a - 3,use,false)) {
							use[i] = false;
							use[j] = false;
							use[k] = false;
							Main.ret = ret;
							return true;
						}
						use[i] = false;
						use[j] = false;
						use[k] = false;
					}
				}
			}
			return false;
		}
		else if(t) {
			for(int i = 0; i < use.length; i++) {
				if(use[i]) continue;
				for(int j = i+1; j < use.length; j++) {
					if(use[j]) continue;
					for(int k = j+1; k < use.length; k++) {
						if(use[k]) continue;
						int[] tes = new int[3];
						tes[0] = Main.k[i];
						tes[1] = Main.k[j];
						tes[2] = Main.k[k];
						Arrays.sort(tes);
						if(tes[1] == Main.k[j]) continue;
						use[i] = true;
						use[j] = true;
						use[k] = true;
						if(dfs(a - 3,use,false)) {
							use[i] = false;
							use[j] = false;
							use[k] = false;
							return true;
						}
						use[i] = false;
						use[j] = false;
						use[k] = false;
					}
				}
			}
			return false;
		}
		else {
			boolean ok = true;
			boolean ret = true;
			for(int i = 0; i < use.length; i++) {
				if(use[i]) continue;
				for(int j = i+1; j < use.length; j++) {
					if(use[j]) continue;
					for(int k = j+1; k < use.length; k++) {
						if(use[k]) continue;
						int[] tes = new int[3];
						tes[0] = Main.k[i];
						tes[1] = Main.k[j];
						tes[2] = Main.k[k];
						Arrays.sort(tes);
						if(tes[1] == Main.k[j]) continue;
						ok = true;
						use[i] = true;
						use[j] = true;
						use[k] = true;
						ret &= dfs(a - 3,use,true);
						use[i] = false;
						use[j] = false;
						use[k] = false;
					}
				}
			}
			return ret & ok;
		}
	}
}
0