Advertisement
Guest User

E 19.08.13

a guest
Aug 21st, 2013
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.21 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <ctype.h>
  6. #include <bitset>
  7. #include <iostream>
  8. #include <stack>
  9. #include <queue>
  10. #include <set>
  11. #include <map>
  12. #include <string>
  13. #include <algorithm>
  14. using namespace std;
  15.  
  16.  
  17. int main() {
  18.     freopen("input.txt", "r", stdin);
  19.     freopen("output.txt", "w", stdout);
  20.    
  21.     scanf("%d\n%s", &n, s);
  22.  
  23.     for (int j = 0; j < 64; j++) {
  24.         d[0][j] = p[0][j] = -1;
  25.     }
  26.     d[0][f(c('L'), c('R'), 0, 0)] = 0;
  27.     for (int i = 1; i <= n; i++) {
  28.         for (int j = 0; j < 64; j++) {
  29.             d[i][j] = 1 << 30;
  30.             p[i][j] = -1;
  31.         }
  32.     }
  33.    
  34.     for (int i = 1; i <= n; i++) {
  35.         for (int j = 0; j < 64; j++) {
  36.             if (d[i - 1][j] == -1)
  37.                 continue;
  38.             u(i, j, f(l(j), r(j), 0, 0), 0);
  39.             u(i, j, f(l(j), r(j), 1, 0), 1);
  40.             u(i, j, f(l(j), r(j), 0, 1), 1);
  41.             if (!lp(j)) {
  42.                 for (int p = 0; p < 4; p++) {
  43.                     if (p == l(j) || p == r(j))
  44.                         continue;
  45.                     u(i, j, f(p, r(j), 1, 0), 3);
  46.                 }
  47.             } else {
  48.                 for (int p = 0; p < 4; p++) {
  49.                     if (p == l(j) || p == r(j))
  50.                         continue;
  51.                     u(i, j, f(p, r(j), 1, 0), 9);
  52.                 }
  53.             }
  54.             if (!rp(j)) {
  55.                 for (int p = 0; p < 4; p++) {
  56.                     if (p == l(j) || p == r(j))
  57.                         continue;
  58.                     u(i, j, f(l(j), p, 0, 1), 3);
  59.                 }
  60.             } else {
  61.                 for (int p = 0; p < 4; p++) {
  62.                     if (p == l(j) || p == r(j))
  63.                         continue;
  64.                     u(i, j, f(l(j), p, 0, 1), 9);
  65.                 }
  66.             }
  67.             for (int p1 = 0; p1 < 4; p1++) {
  68.                 for (int p2 = 0; p2 < 4; p2++) {
  69.                     if (p1 == p2)
  70.                         continue;
  71.                     u(i, j, f(p1, p2, 1, 1), 10);
  72.                 }
  73.             }
  74.         }
  75.  
  76.         for (int j = 0; j < 64; j++) {
  77.             if ((l(j) == c('R') && r(j) == c('L')) ||
  78.                 (l(j) == r(j)) ||
  79.                 (s[i - 1] != 'N' && l(j) != c(s[i - 1]) && r(j) != c(s[i - 1])) ||
  80.                 (l(j) == c(s[i - 1]) && !lp(j)) ||
  81.                 (r(j) == c(s[i - 1]) && !rp(j))) {
  82.                 d[i][j] = p[i][j] = -1;
  83.                 continue;
  84.             }
  85.         }
  86.     }
  87.     stack<int> st;
  88.     int ii = n, jj = -1;
  89.     for (int j = 0; j < 64; j++)
  90.         if (d[ii][j] != -1 && (jj == -1 || d[ii][j] < d[ii][jj]))
  91.             jj = j;
  92.     printf("%d\n", d[ii][jj]);
  93.     while (ii) {
  94.         st.push(jj);
  95.         jj = p[ii--][jj];
  96.     }
  97.     char q[] = "LURD";
  98.     while (!st.empty()) {
  99.         printf("%c%c\n", q[l(st.top())], q[r(st.top())]);
  100.         st.pop();
  101.     }
  102.     return 0;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement