Awa正在玩一款名叫明日方舟的游戏。
这款游戏在一个高度为n,宽度为m的网格上进行,玩家可以部署干员在格子上来击败敌人。
在这个问题中,我们定义第x行,第y列的格子的坐标为(x,y),也就是说,从左上角到左下角依次为(1,1),(2,1),...,(n-1,1),(n,1),从左上角到右上角依次为(1,1),(1,2),...,(1,m-1),(1,m),右下角的格子坐标为(n,m)
在最新的一次活动中,场地上会有一个名叫“小车发射器”的装置,Awa在这里召唤小车!同时,Awa可以在其他格子上部署导向板:当小车开到一个未触发的导向板上时,小车就会按照导向板指向的方向前进,而当小车开出地图了,小车就会自爆!(在这个问题中,小车的油非常充足,只要没有自爆就会沿着当前行驶方向一直移动,同时,我们不考虑小车发射器的碰撞体积,也就是说小车发射器发射完小车就会消失,不会影响小车的后续运动)
当然,因为Awa的干员练度达到了力大砖飞的境界,他并不需要通过小车的帮助来击败敌人,因此,他非常随意的在地图上摆满了导向板,然后开动小车。同时,他非常好奇小车一共能转向多少次,因为小车开的太慢了,Awa懒得去数,因此他把这个问题扔给了你。
90度和180度转弯都算作“一次转向”,每个导向板只会在第一次走到的时候被触发,初始位置的导向板会被触发。
输入描述:
第一行四个正整数n,m,x,y,表示矩形区域大小为n行m列,以及小车发射器的位置(x,y)(对应位置上的方向就是小车的初始方向) 之后n行每行m个字符U,D,L,R之一,表示该格子的导向板类型,或者小车的初始方向。 U:向上; D:向下; L:向左; R:向右
输出描述:
一个非负整数,表示小车转向的次数。
示例1
输入
复制2 2 1 1 DU RU
2 2 1 1 DU RU
输出
复制2
2
备注:
1≤n,m≤1001 \le n,m \le 1001≤n,m≤100 1≤x≤n1\le x \le n1≤x≤n 1≤y≤m1\le y \le m1≤y≤m
#include<stdio.h>
int main()
{
int n,m,x,y,count=0;
char a[101][101];
char b;
int c[101][101]={0};
scanf("%d %d %d %d",&n,&m,&x,&y);
getchar();
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%c",&a[i][j]);
}
getchar();
}
while((x>=1&&x<=n)&&(y>=1&&y<=m))
{
b=a[x][y];
c[x][y]=1;
if(b=='U')
{
while(c[x][y]&&(x>=1&&x<=n)&&(y>=1&&y<=m))
{
x--;
}
}
else if(b=='D')
{
while(c[x][y]&&(x>=1&&x<=n)&&(y>=1&&y<=m))
{
x++;
}
}
else if(b=='L')
{
while(c[x][y]&&(x>=1&&x<=n)&&(y>=1&&y<=m))
{
y--;
}
}
else if(b=='R')
{
while(c[x][y]&&(x>=1&&x<=n)&&(y>=1&&y<=m))
{
y++;
}
}
if(b!=a[x][y]&&(x>=1&&x<=n)&&(y>=1&&y<=m))
{
count++;
}
}
printf("%d",count);
}