题目链接:点击打开链接
题意:
每个点有一个机器人(.),下面是一些指令,每次发出指令(一个字母)所有机器人都会执行移动。
当机器人到E点就会离开。
若机器人前方是‘#‘ 或者边界则停留原地。一个方格可以站多个机器人。
bitset模拟。。
#include <cstdio> #include <cstring> #include <algorithm> #include <bitset> using namespace std; char s[100005]; int n, m, k; int work(){ bitset<23000> a, b, c, e; for(int i = 0; i < n; i++) { scanf("%s", s); for(int j = 0; j < m; j++) { (s[j]=='#'?b:a).set(i*m+j); (s[j]=='E'?e.set(i*m+j):0); } } scanf("%s", s); c = a; for(int i = 0; i < k; i++) { if(c==e)return i; if(s[i]=='U') c = ((c>>m)&a) | (c&(b<<m)); if(s[i]=='L') c = ((c>>1)&a) | (c&(b<<1)); if(s[i]=='D') c = ((c<<m)&a) | (c&(b>>m)); if(s[i]=='R') c = ((c<<1)&a) | (c&(b>>1)); } if(c==e)return k; return -1; } int main(){ int i, j; while (~scanf("%d %d %d", &n, &m, &k)){ printf("%d\n", work()); } return 0; }
Codeforces 97D Robot in Basement bitset+模拟
时间: 2024-10-12 18:51:30