Submission #1173882


Source Code Expand

import java.io.*;
import java.util.*;

public class Main {
    //-------------------------------------------------------------//
    public static final void main(String[] args) {
        new Main().solve();
    }

    //-------------------------------------------------------------//
    private final int dx4[] = {0, 0, -1, 1};
    private final int dy4[] = {-1, 1, 0, 0};
    private final int dx8[] = {0, 1, 1, 1, 0, -1, -1, -1};
    private final int dy8[] = {-1, -1, 0, 1, 1, 1, 0, -1};
    //-------------------------------------------------------------//
    private final Scanner sc = new Scanner(System.in);
    private Random rnd = new Random();
    private final boolean DEBUG = false;
    private final int H = 30;
    private final int W = 30;
    private final int K = 450;
    private final int T = 800;
    private final int MOVE_LIMIT = 450;
    private final double INITIAL_TEMP = 0.3d;
    private final char[] UDLR = {'U', 'D', 'L', 'R'};
    private boolean[][] board = new boolean[H][W];
    private List<Car> cars = new ArrayList<Car>();
    int mh(int r1, int c1, int r2, int c2) { return Math.abs(r1 - r2) + Math.abs(c1 - c2); }
    void solve() {
        sc.nextLine();
        for (int i = 0; i < H; i++)
            Arrays.fill(board[i], false);
        for (int i = 1; i <= K; i++) {
            int r = sc.nextInt() - 1;
            int c = sc.nextInt() - 1;
            int tr = sc.nextInt() - 1;
            int tc = sc.nextInt() - 1;
            board[r][c] = true;
            cars.add(new Car(r, c, tr, tc));
        }
        List<String> ans = new ArrayList<String>();
        double temp = INITIAL_TEMP;
        int moveLimit = MOVE_LIMIT;
        for (int turn = 0; turn < T; turn++) {
            temp = INITIAL_TEMP - INITIAL_TEMP * ((double) turn / (double) T);
            moveLimit = (int)(MOVE_LIMIT - MOVE_LIMIT * ((double) turn / (double) T)) + 100;
            boolean notMove = true;
            List<Integer> res = new ArrayList<Integer>();
            int moveNum = 0;
            for (int ci = 1; ci <= K; ci++) {
                Car car = cars.get(ci - 1);
                if ((car.isGoal() && rnd.nextDouble() >= temp) || moveNum > moveLimit) {
                    res.add(-1);
                    continue;
                }
                int minDist = 100000;
                for (int i = 0; i < 4; i++) {
                    int r = car.r + dy4[i];
                    int c = car.c + dx4[i];
                    if (car.pr == r && car.pc == c) continue;
                    if (r < 0 || r >= H || c < 0 || c >= W) continue;
                    int dist = mh(r, c, car.gr, car.gc);
                    if (dist < minDist && !board[r][c]) {
                        minDist = dist;
                    }
                }

                boolean moved = false;
                for (int i = 0; i < 4; i++) {
                    int r = car.r + dy4[i];
                    int c = car.c + dx4[i];
                    if (car.pr == r && car.pc == c) continue;
                    if (r < 0 || r >= H || c < 0 || c >= W) continue;
                    int dist = mh(r, c, car.gr, car.gc);
                    if (board[r][c]) continue;
                    if (dist == minDist || rnd.nextDouble() <= 0.1) {
                        if (rnd.nextDouble() <= 0.1) continue;
                        notMove = false;
                        moved = true;
                        moveNum++;
                        board[r][c] = true;
                        res.add(i);
                        break;
                    }
                }
                if (!moved) res.add(-1);
            }
            if (notMove) break;
            String rs = "";
            for (int i = 0; i < K; i++) {
                int d = res.get(i);
                if (d == -1) {
                    rs += "-";
                }
                else {
                    Car car = cars.get(i);
                    board[car.r][car.c] = false;
                    car.pr = car.r;
                    car.pc = car.c;
                    car.r += dy4[d];
                    car.c += dx4[d];
                    board[car.r][car.c] = true;
                    rs += UDLR[d];
                }
            }
            ans.add(rs);
        }

        if (DEBUG) {
            try {
                File file = new File("out.txt");
                FileWriter fw = new FileWriter(file);
                BufferedWriter bw = new BufferedWriter(fw);
                PrintWriter pw = new PrintWriter(bw);
                pw.println(ans.size());
                for (int i = 0; i < ans.size(); i++) {
                    pw.println(ans.get(i));
                }
                pw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        else {
            System.out.println(ans.size());
            for (int i = 0; i < ans.size(); i++) {
                System.out.println(ans.get(i));
            }
        }
    }
}

class Car {
    int r, c;
    int gr, gc;
    int pr, pc;
    Car() {}
    Car(int r, int c, int gr, int gc) { this.r = r; this.c = c; this.gr = gr; this.gc = gc; pr = r; pc = c; }
    boolean isGoal() { return r == gr && c == gc; }
}

Submission Info

Submission Time
Task B - 日本橋大渋滞
User suikkee
Language Java8 (OpenJDK 1.8.0)
Score 17916
Code Size 5377 Byte
Status AC
Exec Time 525 ms
Memory 156920 KB

Judge Result

Set Name test_01 test_02 test_03 test_04 test_05 test_06 test_07 test_08 test_09 test_10 test_11 test_12 test_13 test_14 test_15 test_16 test_17 test_18 test_19 test_20 test_21 test_22 test_23 test_24 test_25 test_26 test_27 test_28 test_29 test_30
Score / Max Score 532 / 50000 688 / 50000 602 / 50000 573 / 50000 589 / 50000 617 / 50000 641 / 50000 578 / 50000 740 / 50000 604 / 50000 545 / 50000 589 / 50000 589 / 50000 653 / 50000 653 / 50000 588 / 50000 644 / 50000 648 / 50000 507 / 50000 599 / 50000 553 / 50000 561 / 50000 494 / 50000 493 / 50000 644 / 50000 579 / 50000 666 / 50000 571 / 50000 568 / 50000 608 / 50000
Status
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
Set Name Test Cases
test_01 subtask_01_01.txt
test_02 subtask_01_02.txt
test_03 subtask_01_03.txt
test_04 subtask_01_04.txt
test_05 subtask_01_05.txt
test_06 subtask_01_06.txt
test_07 subtask_01_07.txt
test_08 subtask_01_08.txt
test_09 subtask_01_09.txt
test_10 subtask_01_10.txt
test_11 subtask_01_11.txt
test_12 subtask_01_12.txt
test_13 subtask_01_13.txt
test_14 subtask_01_14.txt
test_15 subtask_01_15.txt
test_16 subtask_01_16.txt
test_17 subtask_01_17.txt
test_18 subtask_01_18.txt
test_19 subtask_01_19.txt
test_20 subtask_01_20.txt
test_21 subtask_01_21.txt
test_22 subtask_01_22.txt
test_23 subtask_01_23.txt
test_24 subtask_01_24.txt
test_25 subtask_01_25.txt
test_26 subtask_01_26.txt
test_27 subtask_01_27.txt
test_28 subtask_01_28.txt
test_29 subtask_01_29.txt
test_30 subtask_01_30.txt
Case Name Status Exec Time Memory
subtask_01_01.txt AC 495 ms 152240 KB
subtask_01_02.txt AC 518 ms 152020 KB
subtask_01_03.txt AC 463 ms 155792 KB
subtask_01_04.txt AC 486 ms 150440 KB
subtask_01_05.txt AC 481 ms 149072 KB
subtask_01_06.txt AC 472 ms 149872 KB
subtask_01_07.txt AC 492 ms 155120 KB
subtask_01_08.txt AC 458 ms 153092 KB
subtask_01_09.txt AC 448 ms 150472 KB
subtask_01_10.txt AC 488 ms 152736 KB
subtask_01_11.txt AC 458 ms 156920 KB
subtask_01_12.txt AC 441 ms 155968 KB
subtask_01_13.txt AC 494 ms 153572 KB
subtask_01_14.txt AC 505 ms 155456 KB
subtask_01_15.txt AC 442 ms 150184 KB
subtask_01_16.txt AC 490 ms 152044 KB
subtask_01_17.txt AC 488 ms 155536 KB
subtask_01_18.txt AC 525 ms 154928 KB
subtask_01_19.txt AC 450 ms 156728 KB
subtask_01_20.txt AC 461 ms 151536 KB
subtask_01_21.txt AC 452 ms 150744 KB
subtask_01_22.txt AC 515 ms 149704 KB
subtask_01_23.txt AC 481 ms 152500 KB
subtask_01_24.txt AC 476 ms 152656 KB
subtask_01_25.txt AC 504 ms 152288 KB
subtask_01_26.txt AC 454 ms 153292 KB
subtask_01_27.txt AC 487 ms 153528 KB
subtask_01_28.txt AC 447 ms 149252 KB
subtask_01_29.txt AC 487 ms 153436 KB
subtask_01_30.txt AC 482 ms 153128 KB