CSES - Aalto Competitive Programming 2024 - wk9 - Mon - Results
Submission details
Task:Chess board tour
Sender:ZDHKLV
Submission time:2024-11-04 17:13:22 +0200
Language:C++ (C++20)
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.00 sdetails
#3ACCEPTED0.00 sdetails
#4ACCEPTED0.00 sdetails
#5ACCEPTED0.00 sdetails
#6ACCEPTED0.00 sdetails
#7ACCEPTED0.00 sdetails
#8ACCEPTED0.01 sdetails
#9ACCEPTED0.00 sdetails
#10ACCEPTED0.00 sdetails
#11ACCEPTED0.00 sdetails
#12ACCEPTED0.00 sdetails
#13ACCEPTED0.01 sdetails
#14ACCEPTED0.00 sdetails
#15ACCEPTED0.00 sdetails
#16ACCEPTED0.00 sdetails
#17ACCEPTED0.01 sdetails
#18ACCEPTED0.36 sdetails
#19ACCEPTED0.01 sdetails
#20ACCEPTED0.00 sdetails
#21--details
#22ACCEPTED0.00 sdetails
#23--details
#24ACCEPTED0.00 sdetails
#25ACCEPTED0.00 sdetails
#26ACCEPTED0.00 sdetails
#27--details
#28--details
#29--details
#30--details
#31--details
#32--details
#33--details
#34--details
#35--details
#36--details
#37--details
#38--details
#39--details
#40--details
#41--details
#42--details
#43--details
#44--details
#45--details
#46--details
#47--details
#48--details
#49--details
#50--details
#51--details
#52--details
#53--details
#54--details
#55--details
#56--details

Code

#include <bits/stdc++.h>

using namespace std;

bool dfs(int x, int y, int seen, vector<vector<bool>> &visited, int n, int m, vector<char> &output) {

    if (visited[x][y]) {
        if (x == 0 && y == 0) {
            if (seen < n * m) return false;
            return true;
        }
        return false;
    }

    bool touch_up = (y == 0);
    bool touch_left = (x == 0);
    bool touch_right = (x == n-1);
    bool touch_down = (y == m-1);

    bool can_go_left = (x > 0 && !visited[x-1][y]);
    bool can_go_right = (x+1 < n && !visited[x+1][y]);
    bool can_go_up = (y > 0 && !visited[x][y-1]);
    bool can_go_down = (y+1 < m && !visited[x][y+1]);

    if (touch_up && (can_go_left && can_go_right)) return false;
    if (touch_down && (can_go_left && can_go_right)) return false;
    if (touch_left && (can_go_up && can_go_down)) return false;
    if (touch_right && (can_go_up && can_go_down)) return false;

    visited[x][y] = true;

    if (x > 0 && (!visited[x-1][y] || (x-1 == 0 && y == 0))) {
        output.push_back('U');
        bool b = dfs(x-1, y, seen+1, visited, n, m, output);
        if (b) return true;
        output.pop_back();
    }

    if (x+1 < n && !visited[x+1][y]) {
        output.push_back('D');
        bool b = dfs(x+1, y, seen+1, visited, n, m, output);
        if (b) return true;
        output.pop_back();
    }

    if (y > 0 && (!visited[x][y-1] || (x == 0 && y-1 == 0))) {
        output.push_back('L');
        bool b = dfs(x, y-1, seen+1, visited, n, m, output);
        if (b) return true;
        output.pop_back();
    }

    if (y+1 < m && !visited[x][y+1]) {
        output.push_back('R');
        bool b = dfs(x, y+1, seen+1, visited, n, m, output);
        if (b) return true;
        output.pop_back();
    }

    visited[x][y] = false;

    return false;

}

/*
void dfs(int x, int y, int n, int m) {

    vector<vector<bool>> visited(n, vector<bool>(m, false));

    typedef struct {
        int x, y, seen;
    } state_t;

    stack<state_t> s;
    s.push({ x, y, 0 });

    vector<char> events;

    while (!s.empty()) {

        state_t pos = s.top();
        s.pop();

        if (visited[pos.x][pos.y]) {
            if (pos.x == 0 && pos.y == 0) {
                //
                if (pos.seen < n * m)
                    continue;
                else {
                    bool found = false;
                    for (int i = 0; i < n; i++) {
                        for (int j = 0; j < m; j++) {
                            if (!visited[i][j]) {
                                found = true;
                                break;
                            }
                        }
                        if (found) break;
                    }
                    if (found) continue;

                    cout << "ok" << endl;
                }
            }
            continue;
        }
        
        visited[pos.x][pos.y] = true;

        if (pos.x > 0 && !visited[pos.x-1][pos.y]) {
            events.push_back('L');
            s.push({ pos.x-1, pos.y, pos.seen+1 });

        }

        if (pos.x+1 < n && !visited[pos.x+1][pos.y]) {
            events.push_back('D');
            s.push({ pos.x+1, pos.y, pos.seen+1 });
        }

        if (pos.y > 0 && !visited[pos.x][pos.y-1]) {
            events.push_back('U');
            s.push({ pos.x, pos.y-1, pos.seen+1 });
        }

        if (pos.y+1 < m && !visited[pos.x][pos.y+1]) {
            events.push_back('D');
            s.push({ pos.x, pos.y+1, pos.seen+1 });
        }
        
    }

}
*/

int main() {

    int n, m;
    cin >> n >> m;

    vector<vector<bool>> visited(n, vector<bool>(m, false));
    vector<char> output;
    bool b = dfs(0, 0, 0, visited, n, m, output);

    if (!b) {
        cout << -1 << endl;
    } else {
        for (char c : output)
            cout << c;
        cout << endl;
    }

}

Test details

Test 1

Verdict: ACCEPTED

input
2 2

correct output
DRUL

user output
DRUL

Test 2

Verdict: ACCEPTED

input
2 2

correct output
DRUL

user output
DRUL

Test 3

Verdict: ACCEPTED

input
2 3

correct output
RRDLLU

user output
DRRULL

Test 4

Verdict: ACCEPTED

input
2 2

correct output
DRUL

user output
DRUL

Test 5

Verdict: ACCEPTED

input
4 4

correct output
DDDRUURDDRUUULLL

user output
DDDRUURDDRUUULLL

Test 6

Verdict: ACCEPTED

input
3 3

correct output
-1

user output
-1

Test 7

Verdict: ACCEPTED

input
4 4

correct output
DDDRUURDDRUUULLL

user output
DDDRUURDDRUUULLL

Test 8

Verdict: ACCEPTED

input
3 5

correct output
-1

user output
-1

Test 9

Verdict: ACCEPTED

input
3 2

correct output
DDRUUL

user output
DDRUUL

Test 10

Verdict: ACCEPTED

input
4 2

correct output
DDDRUUUL

user output
DDDRUUUL

Test 11

Verdict: ACCEPTED

input
5 5

correct output
-1

user output
-1

Test 12

Verdict: ACCEPTED

input
2 2

correct output
DRUL

user output
DRUL

Test 13

Verdict: ACCEPTED

input
5 5

correct output
-1

user output
-1

Test 14

Verdict: ACCEPTED

input
2 2

correct output
DRUL

user output
DRUL

Test 15

Verdict: ACCEPTED

input
5 2

correct output
DDDDRUUUUL

user output
DDDDRUUUUL

Test 16

Verdict: ACCEPTED

input
2 3

correct output
RRDLLU

user output
DRRULL

Test 17

Verdict: ACCEPTED

input
6 7

correct output
RRRRRRDLLLLLDRRRRRDLLLLLDRRRRR...

user output
DDDDDRUUUURDDDDRUUUURDDDDRRULU...

Test 18

Verdict: ACCEPTED

input
5 10

correct output
DDDDRUUURDDDRUUURDDDRUUURDDDRU...

user output
DDDDRUUURDDDRUUURDDDRUUURDDDRU...

Test 19

Verdict: ACCEPTED

input
5 3

correct output
-1

user output
-1

Test 20

Verdict: ACCEPTED

input
6 2

correct output
DDDDDRUUUUUL

user output
DDDDDRUUUUUL

Test 21

Verdict:

input
10 10

correct output
DDDDDDDDDRUUUUUUUURDDDDDDDDRUU...

user output
(empty)

Test 22

Verdict: ACCEPTED

input
3 2

correct output
DDRUUL

user output
DDRUUL

Test 23

Verdict:

input
10 10

correct output
DDDDDDDDDRUUUUUUUURDDDDDDDDRUU...

user output
(empty)

Test 24

Verdict: ACCEPTED

input
2 4

correct output
DRRRULLL

user output
DRRRULLL

Test 25

Verdict: ACCEPTED

input
9 2

correct output
DDDDDDDDRUUUUUUUUL

user output
DDDDDDDDRUUUUUUUUL

Test 26

Verdict: ACCEPTED

input
2 5

correct output
RRRRDLLLLU

user output
DRRRRULLLL

Test 27

Verdict:

input
56 60

correct output
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD...

user output
(empty)

Test 28

Verdict:

input
43 100

correct output
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD...

user output
(empty)

Test 29

Verdict:

input
45 20

correct output
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD...

user output
(empty)

Test 30

Verdict:

input
56 9

correct output
RRRRRRRRDLLLLLLLDRRRRRRRDLLLLL...

user output
(empty)

Test 31

Verdict:

input
97 91

correct output
-1

user output
(empty)

Test 32

Verdict:

input
23 7

correct output
-1

user output
(empty)

Test 33

Verdict:

input
90 95

correct output
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRR...

user output
(empty)

Test 34

Verdict:

input
9 24

correct output
DDDDDDDDRUUUUUUURDDDDDDDRUUUUU...

user output
(empty)

Test 35

Verdict:

input
88 3

correct output
RRDLDRDLDRDLDRDLDRDLDRDLDRDLDR...

user output
(empty)

Test 36

Verdict:

input
3 38

correct output
DDRURDRURDRURDRURDRURDRURDRURD...

user output
(empty)

Test 37

Verdict:

input
111 119

correct output
-1

user output
(empty)

Test 38

Verdict:

input
84 200

correct output
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD...

user output
(empty)

Test 39

Verdict:

input
88 38

correct output
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD...

user output
(empty)

Test 40

Verdict:

input
111 16

correct output
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD...

user output
(empty)

Test 41

Verdict:

input
194 181

correct output
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRR...

user output
(empty)

Test 42

Verdict:

input
46 12

correct output
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD...

user output
(empty)

Test 43

Verdict:

input
179 190

correct output
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD...

user output
(empty)

Test 44

Verdict:

input
17 47

correct output
-1

user output
(empty)

Test 45

Verdict:

input
175 4

correct output
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD...

user output
(empty)

Test 46

Verdict:

input
4 74

correct output
DDDRUURDDRUURDDRUURDDRUURDDRUU...

user output
(empty)

Test 47

Verdict:

input
550 594

correct output
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD...

user output
(empty)

Test 48

Verdict:

input
418 998

correct output
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD...

user output
(empty)

Test 49

Verdict:

input
437 186

correct output
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD...

user output
(empty)

Test 50

Verdict:

input
552 72

correct output
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD...

user output
(empty)

Test 51

Verdict:

input
968 901

correct output
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRR...

user output
(empty)

Test 52

Verdict:

input
223 57

correct output
-1

user output
(empty)

Test 53

Verdict:

input
893 948

correct output
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD...

user output
(empty)

Test 54

Verdict:

input
78 229

correct output
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRR...

user output
(empty)

Test 55

Verdict:

input
874 13

correct output
RRRRRRRRRRRRDLLLLLLLLLLLDRRRRR...

user output
(empty)

Test 56

Verdict:

input
12 366

correct output
DDDDDDDDDDDRUUUUUUUUUURDDDDDDD...

user output
(empty)