結果

問題 No.3418 【絶望】30個並列ごちゃ混ぜHit&Blowで遊ぼう!
コンテスト
ユーザー EvbCFfp1XB
提出日時 2025-12-28 13:43:35
言語 Java
(openjdk 25.0.1)
結果
WA  
実行時間 -
コード長 9,024 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,978 ms
コンパイル使用メモリ 87,876 KB
実行使用メモリ 83,740 KB
スコア 0
平均クエリ数 262.29
最終ジャッジ日時 2025-12-28 13:46:35
合計ジャッジ時間 140,406 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other WA * 100
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {
    private static String[] S = new String[30];
    private static int[] h = new int[30];
    private static int[] b = new int[30];

    public static void main(String[] args) {
        try {
            solve();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void solve() {
        try (Scanner in = new Scanner(System.in)) {
            ArrayList<String> candidiates = new ArrayList<>();
            for (int i = 0; i <= 99999; i++) {
                StringBuilder sb = new StringBuilder();
                int v = i;
                for (int j = 0; j < 5; j++) {
                    sb.append(v % 10);
                    v /= 10;
                }
                if (valid(sb)) {
                    candidiates.add(sb.toString());
                }
            }
            Collections.shuffle(candidiates);
            String q = candidiates.remove(0);
            for (;;) {
                System.out.println(q);
                System.out.flush();
                for (int i = 0; i < S.length; i++) {
                    h[i] = in.nextInt();
                    b[i] = in.nextInt();
                }
                if (h[0] == 5 && b[0] == 0) {
                    break;
                }
                if (h[0] == -1 && b[0] == -1) {
                    break;
                }
                int maxHB = maxHB();
                if (maxHB == 5 || maxHB == 14 || maxHB == 23 || maxHB == 32 || maxHB == 41) {
                    for (int i = candidiates.size() - 1; i >= 0; i--) {
                        String candidiate = candidiates.get(i);
                        if (hb(candidiate, q) == maxHB) {
                            q = candidiate;
                            candidiates.remove(i);
                            break;
                        }
                    }
                } else {
                    for (int i = candidiates.size() - 1; i >= 0; i--) {
                        String candidiate = candidiates.get(i);
                        int hb = hb(candidiate, q);
                        if (hb == 5 || hb == 14 || hb == 23 || hb == 32 || hb == 41) {
                            candidiates.remove(i);
                        }
                    }

                    q = candidiates.remove(0);
//                    if (maxHB == 4 || maxHB == 13 || maxHB == 22 || maxHB == 31 || maxHB == 40) {
//                        for (int i = candidiates.size() - 1; i >= 0; i--) {
//                            String candidiate = candidiates.get(i);
//                            if (hb(candidiate, q) == maxHB) {
//                                q = candidiate;
//                                candidiates.remove(i);
//                                break;
//                            }
//                        }
//                    } else {
//                        for (int i = candidiates.size() - 1; i >= 0; i--) {
//                            String candidiate = candidiates.get(i);
//                            int hb = hb(candidiate, q);
//                            if (hb == 4 || hb == 13 || hb == 22 || hb == 31 || hb == 40) {
//                                candidiates.remove(i);
//                            }
//                        }
//                        if (maxHB == 3 || maxHB == 12 || maxHB == 21 || maxHB == 30) {
//                            for (int i = candidiates.size() - 1; i >= 0; i--) {
//                                String candidiate = candidiates.get(i);
//                                if (hb(candidiate, q) == maxHB) {
//                                    q = candidiate;
//                                    candidiates.remove(i);
//                                    break;
//                                }
//                            }
//                        } else {
//                            for (int i = candidiates.size() - 1; i >= 0; i--) {
//                                String candidiate = candidiates.get(i);
//                                int hb = hb(candidiate, q);
//                                if (hb == 3 || hb == 12 || hb == 21 || hb == 30) {
//                                    candidiates.remove(i);
//                                }
//                            }
//                            if (maxHB == 2 || maxHB == 11 || maxHB == 20) {
//                                for (int i = candidiates.size() - 1; i >= 0; i--) {
//                                    String candidiate = candidiates.get(i);
//                                    if (hb(candidiate, q) == maxHB) {
//                                        q = candidiate;
//                                        candidiates.remove(i);
//                                        break;
//                                    }
//                                }
//                            } else {
//                                for (int i = candidiates.size() - 1; i >= 0; i--) {
//                                    String candidiate = candidiates.get(i);
//                                    int hb = hb(candidiate, q);
//                                    if (hb == 2 || hb == 11 || hb == 20) {
//                                        candidiates.remove(i);
//                                    }
//                                }
//                                if (maxHB == 1 || maxHB == 10) {
//                                    for (int i = candidiates.size() - 1; i >= 0; i--) {
//                                        String candidiate = candidiates.get(i);
//                                        if (hb(candidiate, q) == maxHB) {
//                                            q = candidiate;
//                                            candidiates.remove(i);
//                                            break;
//                                        }
//                                    }
//                                } else {
//                                    for (int i = candidiates.size() - 1; i >= 0; i--) {
//                                        String candidiate = candidiates.get(i);
//                                        int hb = hb(candidiate, q);
//                                        if (hb == 1 || hb == 10) {
//                                            candidiates.remove(i);
//                                        }
//                                    }
//                                    if (maxHB == 0) {
//                                        for (int i = candidiates.size() - 1; i >= 0; i--) {
//                                            String candidiate = candidiates.get(i);
//                                            if (hb(candidiate, q) == maxHB) {
//                                                q = candidiate;
//                                                candidiates.remove(i);
//                                                break;
//                                            }
//                                        }
//                                    } else {
//                                        for (int i = candidiates.size() - 1; i >= 0; i--) {
//                                            String candidiate = candidiates.get(i);
//                                            int hb = hb(candidiate, q);
//                                            if (hb == 0) {
//                                                candidiates.remove(i);
//                                            }
//                                        }
//                                        q = candidiates.remove(0);
//                                    }
//                                }
//                            }
//                        }
//                    }
                }
            }
        }
    }

    private static int hb(String s, String t) {
        int h = 0;
        int b = 0;
        for (int i = 0; i < 5; i++) {
            if (s.charAt(i) == t.charAt(i)) {
                h++;
            }
        }
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                if (j == i) {
                    continue;
                }
                if (s.charAt(i) == t.charAt(j)) {
                    b++;
                }
            }
        }
        return 10 * h + b;
    }

    private static int maxHB() {
        int max = 0;
        for (int i = 0; i < S.length; i++) {
            int hb = 10 * h[i] + b[i];
            if (hb != 50) {
                max = Math.max(max, hb);
            }
        }
        return max;
    }

    private static boolean valid(StringBuilder sb) {
        for (int i = 0; i < sb.length(); i++) {
            for (int j = i + 1; j < sb.length(); j++) {
                if (sb.charAt(j) == sb.charAt(i)) {
                    return false;
                }
            }
        }
        return true;
    }
}
0