結果
| 問題 | No.3418 【絶望】30個並列ごちゃ混ぜHit&Blowで遊ぼう! |
| コンテスト | |
| ユーザー |
EvbCFfp1XB
|
| 提出日時 | 2025-12-28 13:54:28 |
| 言語 | Java (openjdk 25.0.1) |
| 結果 |
AC
|
| 実行時間 | 3,910 ms / 5,000 ms |
| コード長 | 9,075 bytes |
| 記録 | |
| コンパイル時間 | 2,710 ms |
| コンパイル使用メモリ | 82,016 KB |
| 実行使用メモリ | 86,740 KB |
| スコア | 9,837,539 |
| 平均クエリ数 | 1624.61 |
| 最終ジャッジ日時 | 2025-12-28 14:00:20 |
| 合計ジャッジ時間 | 342,139 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 100 |
ソースコード
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 == 505 || maxHB == 514 || maxHB == 523 || maxHB == 532 || maxHB == 541) {
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 == 505 || hb == 514 || hb == 523 || hb == 532 || hb == 541) {
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 100 * (h + b) + 10 * h + b;
}
private static int maxHB() {
int max = 0;
for (int i = 0; i < S.length; i++) {
int hb = 100 * (h[i] + b[i]) + 10 * h[i] + b[i];
if (hb != 550) {
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;
}
}
EvbCFfp1XB