Submission #2165569


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

#define int long long

int dx[] = {1, 0, -1, 0, 1, -1, -1, 1};
int dy[] = {0, 1, 0, -1, 1, 1, -1, -1};

/*
#define cin ifs
#define cout ofs
ifstream ifs("in.txt");
ofstream ofs("out.txt");
//*/

int H, W, K, T;
int omp[30][30], nmp[30][30] = {};
int A[450], B[450], C[450], D[450];

// xorshiftを用いた乱数
unsigned int xor64(int range) {
    static unsigned int x = 88172645463325252ULL;
    x = x ^ (x << 13);
    x = x ^ (x >> 7);
    return (x = x ^ (x << 17)) % range;
}

//盤面をリセット
void reset() {
    for (int i = 0; i < 30; i++) {
        for (int j = 0; j < 30; j++) {
            omp[i][j] = nmp[i][j];
        }
    }
    for (int i = 0; i < 30; i++) {
        for (int j = 0; j < 30; j++) {
            nmp[i][j] = -1;
        }
    }
}

signed main() {
    cin >> H >> W >> K >> T;
    reset();
    for (int i = 0; i < 450; i++) {
        cin >> A[i] >> B[i] >> C[i] >> D[i];
        A[i]--;
        B[i]--;
        C[i]--;
        D[i]--;
        nmp[A[i]][B[i]] = i;
    }
    int turn = 2000;
    cout << turn << endl;
    for (int i = 0; i < turn; i++) {
        reset();
        double prob = exp(-100.0 / (turn - i + 1));
        for (int j = 0; j < 450; j++) {
            if (xor64(2) == 0) {
                int dy = (C[j] - A[j] > 0) - (C[j] - A[j] < 0);
                if (prob > xor64(1000) / 1000.0) {
                    dy = xor64(3) - 1;
                }
                if ((omp[A[j] + dy][B[j]] != -1 && omp[A[j] + dy][B[j]] != j) ||
                    nmp[A[j] + dy][B[j]] != -1 || A[j] + dy < 0 ||
                    A[j] + dy >= 30) {
                    dy = 0;
                }
                A[j] += dy;
                nmp[A[j]][B[j]] = j;
                switch (dy) {
                    case 1:
                        cout << 'D';
                        break;
                    case -1:
                        cout << 'U';
                        break;
                    case 0:
                        cout << '-';
                        break;
                }
            } else {
                int dx = (D[j] - B[j] > 0) - (D[j] - B[j] < 0);
                if (prob > xor64(1000) / 1000.0) {
                    dx = xor64(3) - 1;
                }
                if ((omp[A[j]][B[j] + dx] != -1 && omp[A[j]][B[j] + dx] != j) ||
                    nmp[A[j]][B[j] + dx] != -1 || B[j] + dx < 0 ||
                    B[j] + dx >= 30) {
                    dx = 0;
                }
                B[j] += dx;
                nmp[A[j]][B[j]] = j;
                switch (dx) {
                    case 1:
                        cout << 'R';
                        break;
                    case -1:
                        cout << 'L';
                        break;
                    case 0:
                        cout << '-';
                        break;
                }
            }
        }
        cout << endl;
    }
    return 0;
}

Submission Info

Submission Time
Task B - 日本橋大渋滞
User packer_jp
Language C++14 (GCC 5.4.1)
Score 21179
Code Size 3090 Byte
Status AC
Exec Time 59 ms
Memory 1536 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 894 / 50000 756 / 50000 956 / 50000 476 / 50000 838 / 50000 975 / 50000 462 / 50000 738 / 50000 699 / 50000 802 / 50000 600 / 50000 892 / 50000 617 / 50000 751 / 50000 491 / 50000 565 / 50000 679 / 50000 916 / 50000 645 / 50000 679 / 50000 613 / 50000 601 / 50000 787 / 50000 311 / 50000 594 / 50000 832 / 50000 1104 / 50000 516 / 50000 691 / 50000 699 / 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 59 ms 1536 KB
subtask_01_02.txt AC 55 ms 1152 KB
subtask_01_03.txt AC 55 ms 1152 KB
subtask_01_04.txt AC 55 ms 1152 KB
subtask_01_05.txt AC 55 ms 1152 KB
subtask_01_06.txt AC 55 ms 1152 KB
subtask_01_07.txt AC 55 ms 1152 KB
subtask_01_08.txt AC 55 ms 1152 KB
subtask_01_09.txt AC 55 ms 1152 KB
subtask_01_10.txt AC 55 ms 1152 KB
subtask_01_11.txt AC 55 ms 1152 KB
subtask_01_12.txt AC 55 ms 1152 KB
subtask_01_13.txt AC 55 ms 1152 KB
subtask_01_14.txt AC 56 ms 1152 KB
subtask_01_15.txt AC 55 ms 1152 KB
subtask_01_16.txt AC 55 ms 1152 KB
subtask_01_17.txt AC 55 ms 1152 KB
subtask_01_18.txt AC 55 ms 1152 KB
subtask_01_19.txt AC 55 ms 1152 KB
subtask_01_20.txt AC 55 ms 1152 KB
subtask_01_21.txt AC 55 ms 1152 KB
subtask_01_22.txt AC 55 ms 1152 KB
subtask_01_23.txt AC 55 ms 1152 KB
subtask_01_24.txt AC 55 ms 1152 KB
subtask_01_25.txt AC 55 ms 1152 KB
subtask_01_26.txt AC 56 ms 1152 KB
subtask_01_27.txt AC 55 ms 1152 KB
subtask_01_28.txt AC 55 ms 1152 KB
subtask_01_29.txt AC 55 ms 1152 KB
subtask_01_30.txt AC 55 ms 1152 KB