結果
問題 | No.5017 Tool-assisted Shooting |
ユーザー |
![]() |
提出日時 | 2023-07-16 14:40:18 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 294 ms / 2,000 ms |
コード長 | 3,585 bytes |
コンパイル時間 | 3,335 ms |
コンパイル使用メモリ | 76,612 KB |
実行使用メモリ | 73,448 KB |
スコア | 74,830 |
平均クエリ数 | 399.74 |
最終ジャッジ日時 | 2023-07-16 14:40:45 |
合計ジャッジ時間 | 25,948 ms |
ジャッジサーバーID (参考情報) |
judge12 / judge13 |
純コード判定しない問題か言語 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 100 |
ソースコード
import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.InputStreamReader;public class Main {static boolean batch = false;static boolean readFile = false;static int num = 0;static int H = 60;static int H1;static int W = 25;static int T = 1000;static int[][] hp0, hp, pw;static int[] ap;public static void main(String[] args) throws Exception {if (batch) {readFile = true;}if (readFile) {if (batch) {long tl = 2000; // TODOlong tw = tl - 200;long total = 0;int bidx = 0;int best = 0;int widx = 0;int worst = 1000000000;int re = 0;int tle = 0;for (int z = 0; z < 100; z++) {try {long st = System.currentTimeMillis();int score = solve(z);long time = System.currentTimeMillis() - st;if (time > tw) {System.out.println(z + ":\t" + score + "\t" + time + "ms");if (time > tl) {tle++;}} else {System.out.println(z + ":\t" + score);}total += score;if (score > best) {best = score;bidx = z;}if (score < worst) {worst = score;widx = z;}} catch (Exception e) {System.out.println(z + ":\t" + e.getMessage());re++;}}System.out.println("total: " + total);System.out.println("best: " + bidx + ": " + best);System.out.println("worst: " + widx + ": " + worst);System.out.println("RE: " + re);System.out.println("TLE: " + tle);} else {int score = solve(num);System.out.println(score);}} else {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));init(br);solve(br);}}static int solve(int z) throws Exception {StringBuilder sb = new StringBuilder();sb.append(z);while (sb.length() < 4) {sb.insert(0, '0');}File file = new File("G:\\AHC\\xxx\\in\\" + sb.toString() + ".txt");BufferedReader br = new BufferedReader(new FileReader(file));init(br);return solve(br);}static void init(BufferedReader br) throws Exception {H1 = H - 1;hp0 = new int[W][H];hp = new int[W][H];pw = new int[W][H];ap = new int[W];}static int solve(BufferedReader br) throws Exception {int score = 0;int cx = 12;int lv = 1;int sum = 0;for (int t = 0; t < T; t++) {int n = Integer.parseInt(br.readLine());if (n == -1) {return score;}// 1マス下がるfor (int y = 0; y < H1; y++) {for (int x = 0; x < W; x++) {hp0[x][y] = hp0[x][y + 1];hp[x][y] = hp[x][y + 1];pw[x][y] = pw[x][y + 1];}}for (int x = 0; x < W; x++) {hp0[x][H1] = 0;hp[x][H1] = 0;pw[x][H1] = 0;}// 敵機出現for (int i = 0; i < n; i++) {String[] sa = br.readLine().split(" ");int h = Integer.parseInt(sa[0]);int p = Integer.parseInt(sa[1]);int x = Integer.parseInt(sa[2]);hp0[x][H1] = h;hp[x][H1] = h;pw[x][H1] = p;}// 自機移動char dir = getMoveDir();if (dir == 'L') {cx--;if (cx == -1) {cx = W - 1;}} else if (dir == 'R') {cx++;if (cx == W) {cx = 0;}}System.out.println(dir);// 攻撃for (int y = 1; y < H; y++) {if (hp[cx][y] > 0) {hp[cx][y] -= lv;if (hp[cx][y] <= 0) {hp[cx][y] = 0;score += hp0[cx][y];sum += pw[cx][y];lv = 1 + sum / 100;}break;}}}return score;}static char getMoveDir() {return 'S';}}