#include<bits/stdc++.h>
using namespace std;
int n,m,len,l=0,v=0;
char g[55][55];
string s;
int main(){
int x,y,tx,ty,f;
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>g[i][j];
if(g[i][j]=='*'){
tx=i;ty=j;
}
}
cin>>len;
getchar();
getline(cin,s);
for(int i=0;i<len;i++){
if(s[i]=='L') l++;
else if(s[i]=='R') l--;
else if(s[i]=='U') v++;
else v=max(v-1,0);
l=(l+8)%8;
f=0;
if(l==1){
for(int i=1;i<=v;i++){
x=tx-1,y=ty-1;
if(x<1||y<1) {
f=1;break;
}
if(g[x][y]=='#'){
f=1;break;
}
if(x>=1&&y>=1)//因为前面只判断了有一个越界跳出。这里要俩都不越界,访问数组才能成功
if(g[x][ty]=='#'&&g[tx][y]=='#'){
f=1;break;
}
tx=x;ty=y;
}
}
else if(l==3){
for(int i=1;i<=v;i++){
x=tx+1,y=ty-1;
if(x>n||y<1) {
f=1;break;
}
if(g[x][y]=='#'){
f=1;break;
}
if(x<=n&&y>=1)
if(g[x][ty]=='#'&&g[tx][y]=='#'){
f=1;break;
}
tx=x;ty=y;
}
}
else if(l==5){
for(int i=1;i<=v;i++){
x=tx+1,y=ty+1;
if(x>n||y>m) {
f=1;break;
}
if(g[x][y]=='#'){
f=1;break;
}
if(x<=n&&y<=m)
if(g[x][ty]=='#'&&g[tx][y]=='#'){
f=1;break;
}
tx=x;ty=y;
}
}
else if(l==7){
for(int i=1;i<=v;i++){
x=tx-1,y=ty+1;
if(x<1||y>m) {
f=1;break;
}
if(g[x][y]=='#'){
f=1;break;
}
if(x>=1&&y<=m)
if(g[x][ty]=='#'&&g[tx][y]=='#'){
f=1;break;
}
tx=x;ty=y;
}
}
else if(l==0){
for(int i=1;i<=v;i++){
x=tx-1,y=ty;
if(x<1) {
f=1;break;
}
if(g[x][y]=='#'){
f=1;break;
}
tx=x;ty=y;
}
}
else if(l==2){
for(int i=1;i<=v;i++){
x=tx,y=ty-1;
if(y<1) {
f=1;break;
}
if(g[x][y]=='#'){
f=1;break;
}
tx=x;ty=y;
}
}
else if(l==4){
for(int i=1;i<=v;i++){
x=tx+1,y=ty;
if(x>n) {
f=1;break;
}
if(g[x][y]=='#'){
f=1;break;
}
tx=x;ty=y;
}
}
else if(l==6){
for(int i=1;i<=v;i++){
x=tx,y=ty+1;
if(y>m) {
f=1;break;
}
if(g[x][y]=='#'){
f=1;break;
}
tx=x;ty=y;
}
}
if(f){
cout<<"Crash! ";
v=0;
}
cout<<tx<<" "<<ty<<endl;
//没碰撞也输出tx,ty。因为每走一步tx,ty都会更新
//调试的时候cout会卡住 走不到下一步,写printf比较好调
}
}
#include<bits/stdc++.h>
using namespace std;
int x,y,tx,ty,n,m,len,l=0,v=0,step;
int dx[8]={-1,-1,0,1,1,1,0,-1},dy[8]={0,-1,-1,-1,0,1,1,1};
char g[55][55];
string s;
void ff(){
x=tx+dx[l],y=ty+dy[l];
if(g[x][y]=='#'){
v=0;step=0;cout<<"Crash! ";
}
else if(l%2&&g[tx][y]=='#'&&g[x][ty]=='#'){
v=0;step=0;cout<<"Crash! ";
}
else {
tx=x;ty=y;--step;
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>g[i][j];
if(g[i][j]=='*'){
tx=i;ty=j;
}
}
for(int i=0;i<=n+1;i++){
g[i][0]=g[i][m+1]='#';
}
for(int j=0;j<=m+1;j++){
g[0][j]=g[n+1][j]='#';
}
cin>>len;
getchar();
getline(cin,s);
for(int i=0;i<len;i++){
if(s[i]=='L') l++;
else if(s[i]=='R') l--;
else if(s[i]=='U') v++;
else v=max(v-1,0);
l=(l+8)%8;
step=v;
while(step) ff(); //实现整一条路的遍历
//step随着这一路往后走不断减减,如果一路都没撞v不用变为0。所以不能直接调用v
printf("%d %d\n", tx, ty);
}
}
#include<bits/stdc++.h>
using namespace std;
int x,y,tx,ty,n,m,len,l=0,v=0,step,a[55][55],g[55][55];
int dx[8]={-1,-1,0,1,1,1,0,-1},dy[8]={0,-1,-1,-1,0,1,1,1};
char c;
string s;
void ff(){
if(g[tx][ty]&(1<<l)){
v=0;step=0;cout<<"Crash! ";
}
else if(l%2&&(g[tx][ty]&(1<<(l+1)%8))&&(g[tx][ty]&(1<<(l+7)%8))){
v=0;step=0;cout<<"Crash! ";
}
else {
tx+=dx[l];ty+=dy[l];--step;
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>c;
if(c=='*'){
tx=i;ty=j;
a[i][j]=0;
}
else if(c=='#') a[i][j]=1;//有障碍为1
else a[i][j]=0;
}
for(int i=0;i<=n+1;i++){
a[i][0]=a[i][m+1]=1;
}
for(int j=0;j<=m+1;j++){
a[0][j]=a[n+1][j]=1;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
for(int k=0;k<8;k++){
g[i][j]|=(a[i+dx[k]][j+dy[k]]<<k);
//g[i][j]为8位二进制,第k个方向有障碍,则第k位为1
}
cin>>len;
getchar();
getline(cin,s);
for(int i=0;i<len;i++){
if(s[i]=='L') l++;
else if(s[i]=='R') l--;
else if(s[i]=='U') v++;
else v=max(v-1,0);
l=(l+8)%8;
step=v;
while(step) ff(); //实现整一条路的遍历
//step随着这一路往后走不断减减,如果一路都没撞v不用变为0。所以不能直接调用v
printf("%d %d\n", tx, ty);
}
}