“达梦杯”武汉理工大学第五届新生程序设计大赛

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);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间的远方32

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值