【洛谷P1518】两只塔姆斯沃牛

这篇博客作者分享了自己做绿题《洛谷P1518》的心得,指出题目是纯粹的模拟问题。作者提到初次设定的tot上界为1000000,意外地顺利通过,随后尝试手动测试上限,对于能轻易通过感到惊讶。博客中还表达了对自己只能解决此类简单模拟题目的感慨。

觉得自己绿题做的太少了,就选了最简单的绿题。

这个题类似于之前一个模拟赛的题,某子沐应该印象深刻(滑稽)

就是纯粹的模拟。

就是模拟啊。。

解释都在代码里了qwq

泥萌做法为什么那么高端啊,瑟瑟发抖

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
char s[15][15]; 
int mp[15][15];//转一下地图 
int tc,tj;//这里指的是面朝什么方向。0-北,1-东,2-南,3-西 
int xc,yc,xj,yj;//每时每刻的坐标。 
void walls()
{
    for(int i=0;i<=11;i++){
        mp[0][i]=mp[i][0]=mp[11][i]=mp[i][11]=1;
    }
}//向周围围个墙 
int main()
{
    for(int i=1;i<=10;i++)
    {
        scanf("%s",s[i]);
        for(int j=0;j<10;j++)
        {
            if(s[i][j]=='.')mp[i][j+1]=0;
            if(s[i][j]=='*')mp[i][j+1]=1;
            if(s[i][j]=='C')xc=j+1,yc=i;
            if(s[i][j]=='F')xj=j+1,yj=i;
        }
    }
    walls();
    int tot=0;//tot记步数 
    tc=tj=0;
    int tcc,tjj;//用来做中转值,否则就会一直原地转了 
    while(tot<=1000000)
    {
        //cout<<yc<<" "<<xc<<" "<<yj<<" "<<xj<<endl;
        ++tot;
        tcc=tc;tjj=tj;
        if(tcc==0){
            if(!mp[yc-1][xc])--yc;
            else ++tc;
        }//面朝北方,看下一个格子可不可以走,可以就修改坐标,不可以就转向 
        if(tcc==1){
            if(!mp[yc][xc+1])++xc;
            else ++tc;
        }
        if(tcc==2){
            if(!mp[yc+1][xc])++yc;
            else ++tc;
        }
        if(tcc==3){
            if(!mp[yc][xc-1])--xc;
            else ++tc;
        }
        tc%=4;//省了一些麻烦 
        if(tjj==0){
            if(!mp[yj-1][xj])--yj;
            else ++tj;
        }
        if(tjj==1){
            if(!mp[yj][xj+1])++xj;
            else ++tj;
        }
        if(tjj==2){
            if(!mp[yj+1][xj])++yj;
            else ++tj;
        }
        if(tjj==3){
            if(!mp[yj][xj-1])--xj;
            else ++tj;
        }
        tj%=4;
        if(xc==xj&&yc==yj){
            printf("%d",tot);return 0;
        }
    }
    puts("0");
    //这就完了呢qwq 
}

最开始出于蒟蒻的慎重,tot上界1000000,随手一交就过了。

然后为了快点,开始手动测tot上限。

你要是问然后。。

喵喵喵?

这也能过???

(我大概只能做这种普及的模拟了)

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值