結果

問題 No.832 麻雀修行中
ユーザー Grenache
提出日時 2019-05-24 22:01:33
言語 Java
(openjdk 23)
結果
AC  
実行時間 221 ms / 2,000 ms
コード長 3,306 bytes
コンパイル時間 3,944 ms
コンパイル使用メモリ 85,568 KB
実行使用メモリ 58,256 KB
最終ジャッジ日時 2024-09-17 10:41:44
合計ジャッジ時間 10,118 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 6
other AC * 25
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

import java.io.*;
import java.util.*;
public class Main_yukicoder832 {
private static Scanner sc;
private static Printer pr;
private static void solve() {
char[] s = sc.next().toCharArray();
int[] cnt = new int[9];
for (char c : s) {
cnt[c - '1']++;
}
for (int i = 0; i < 9; i++) {
if (cnt[i] == 4) {
continue;
}
int[] tmp = Arrays.copyOf(cnt, cnt.length);
tmp[i]++;
if (isOK(tmp)) {
pr.println(i + 1);
}
}
}
private static boolean isOK(int[] cnt) {
// chitoi
boolean chitoi = true;
for (int e : cnt) {
if (e != 2 && e != 0) {
chitoi = false;
break;
}
}
if (chitoi) {
return true;
}
for (int a = 0; a < 9; a++) {
if (cnt[a] < 2) {
continue;
}
int[] tmp = Arrays.copyOf(cnt, cnt.length);
tmp[a] -= 2;
if (isOK2(tmp)) {
return true;
}
}
return false;
}
private static boolean isOK2(int[] cnt) {
Deque<List<Integer>> st = new ArrayDeque<>();
st.push(new ArrayList<>());
while (!st.isEmpty()) {
List<Integer> list = st.pop();
if (list.size() == 4) {
if (isOK3(list, cnt)) {
return true;
}
} else {
int s;
if (list.size() == 0) {
s = 0;
} else {
s = list.get(list.size() - 1) + 1;
}
for (int i = s; i < men.length; i++) {
if (isOK3(list, cnt)) {
List<Integer> tmp = new ArrayList<>(list);
tmp.add(i);
st.push(tmp);
}
}
}
}
return false;
}
private static boolean isOK3(List<Integer> list, int[] cnt) {
int[] tmp = new int[9];
for (int e : list) {
for (int i = 0; i < 9; i++) {
tmp[i] += men[e][i];
}
}
for (int i = 0; i < 9; i++) {
if (tmp[i] > cnt[i]) {
return false;
}
}
return true;
}
private static int[][] men = {
{3, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 3, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 3, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 3, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 3, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 3, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 3, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 3, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 3},
{1, 1, 1, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 0, 0, 0, 0, 0},
{0, 0, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0},
{0, 0, 0, 0, 0, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 0, 1, 1, 1},
{1, 1, 1, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 0, 0, 0, 0, 0},
{0, 0, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0},
{0, 0, 0, 0, 0, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 0, 1, 1, 1},
{1, 1, 1, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 0, 0, 0, 0, 0},
{0, 0, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0},
{0, 0, 0, 0, 0, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 0, 1, 1, 1},
{1, 1, 1, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 0, 0, 0, 0, 0},
{0, 0, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0},
{0, 0, 0, 0, 0, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 0, 1, 1, 1},
};
// ---------------------------------------------------
public static void main(String[] args) {
sc = new Scanner(System.in);
pr = new Printer(System.out);
solve();
pr.close();
sc.close();
}
static class Printer extends PrintWriter {
Printer(OutputStream out) {
super(out);
}
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0