Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- #include <bitset>
- #include <iostream>
- #include <stack>
- #include <queue>
- #include <set>
- #include <map>
- #include <string>
- #include <algorithm>
- using namespace std;
- int main() {
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- scanf("%d\n%s", &n, s);
- for (int j = 0; j < 64; j++) {
- d[0][j] = p[0][j] = -1;
- }
- d[0][f(c('L'), c('R'), 0, 0)] = 0;
- for (int i = 1; i <= n; i++) {
- for (int j = 0; j < 64; j++) {
- d[i][j] = 1 << 30;
- p[i][j] = -1;
- }
- }
- for (int i = 1; i <= n; i++) {
- for (int j = 0; j < 64; j++) {
- if (d[i - 1][j] == -1)
- continue;
- u(i, j, f(l(j), r(j), 0, 0), 0);
- u(i, j, f(l(j), r(j), 1, 0), 1);
- u(i, j, f(l(j), r(j), 0, 1), 1);
- if (!lp(j)) {
- for (int p = 0; p < 4; p++) {
- if (p == l(j) || p == r(j))
- continue;
- u(i, j, f(p, r(j), 1, 0), 3);
- }
- } else {
- for (int p = 0; p < 4; p++) {
- if (p == l(j) || p == r(j))
- continue;
- u(i, j, f(p, r(j), 1, 0), 9);
- }
- }
- if (!rp(j)) {
- for (int p = 0; p < 4; p++) {
- if (p == l(j) || p == r(j))
- continue;
- u(i, j, f(l(j), p, 0, 1), 3);
- }
- } else {
- for (int p = 0; p < 4; p++) {
- if (p == l(j) || p == r(j))
- continue;
- u(i, j, f(l(j), p, 0, 1), 9);
- }
- }
- for (int p1 = 0; p1 < 4; p1++) {
- for (int p2 = 0; p2 < 4; p2++) {
- if (p1 == p2)
- continue;
- u(i, j, f(p1, p2, 1, 1), 10);
- }
- }
- }
- for (int j = 0; j < 64; j++) {
- if ((l(j) == c('R') && r(j) == c('L')) ||
- (l(j) == r(j)) ||
- (s[i - 1] != 'N' && l(j) != c(s[i - 1]) && r(j) != c(s[i - 1])) ||
- (l(j) == c(s[i - 1]) && !lp(j)) ||
- (r(j) == c(s[i - 1]) && !rp(j))) {
- d[i][j] = p[i][j] = -1;
- continue;
- }
- }
- }
- stack<int> st;
- int ii = n, jj = -1;
- for (int j = 0; j < 64; j++)
- if (d[ii][j] != -1 && (jj == -1 || d[ii][j] < d[ii][jj]))
- jj = j;
- printf("%d\n", d[ii][jj]);
- while (ii) {
- st.push(jj);
- jj = p[ii--][jj];
- }
- char q[] = "LURD";
- while (!st.empty()) {
- printf("%c%c\n", q[l(st.top())], q[r(st.top())]);
- st.pop();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement