Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstring>
- #include <cassert>
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <set>
- #define r first
- #define c second
- #define FOR(i, a, b) for (int i = (a); i < (b); ++i)
- #define REP(i, n) FOR (i, 0, n)
- #define _ << " _ " <<
- #define TRACE(x) cerr << #x << " = " << x << endl
- #define debug(...) fprintf(stderr, __VA_ARGS__)
- //#define debug
- //#define TRACE(x)
- using namespace std;
- using pii = pair<int, int>;
- typedef long long llint;
- const int DR[] = {-1, 0, 1, 0};
- const int DC[] = {0, 1, 0, -1};
- const int MAXN = 55;
- int get(char c, int curr) {
- if (c == 'L')
- return (curr + 3) % 4;
- return (curr + 1) % 4;
- }
- char a[MAXN][MAXN];
- int bio[MAXN][MAXN], cookie;
- int n = 50;
- bool in(int r, int c) {
- if (r < 0 || c < 0 || r >= n || c >= n) return false;
- return true;
- }
- bool move(int r, int c, int dir) {
- while (true) {
- int nr = DR[dir];
- int nc = DC[dir];
- if (!in(nr,nc))
- return false;
- if (a[nr][nc] == '#')
- break;
- r = nr;
- c = nc;
- }
- return true;
- }
- bool solve(string s) {
- ++cookie;
- REP(r, MAXN) REP(c, MAXN) a[r][c] = '.';
- int sr = rand() % 2 ? 0 : n - 1;
- a[sr][0] = '@';
- bio[sr][0] = cookie;
- int dir = 1;
- bool flag = true;
- int r = sr, c = 0;
- REP(i, (int)s.size()) {
- int tr = r, tc = c;
- vector<pii> v;
- bool wall = false;
- while (in(tr,tc)) {
- if (bio[tc][tc] != cookie)
- v.push_back({tr,tc});
- int nr = tr + DR[dir];
- int nc = tc + DC[dir];
- if (a[nr][nc] == '#') {
- wall = true;
- break;
- }
- tr = nr;
- tc = nc;
- }
- if (wall) {
- r = tr;
- c = tc;
- dir = get(s[i]);
- } else {
- random_shuffle(v.begin(), v.end());
- if (v.empty()) {
- flag = false;
- break;
- }
- a[v[0].r][v[0].c] = '#';
- move(r, c, dir);
- }
- }
- if (!flag) return false;
- return move(r, c, dir);
- }
- int main(void) {
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement