觉得自己绿题做的太少了,就选了最简单的绿题。
这个题类似于之前一个模拟赛的题,某子沐应该印象深刻(滑稽)
就是纯粹的模拟。
就是模拟啊。。
解释都在代码里了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上限。
你要是问然后。。

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

被折叠的 条评论
为什么被折叠?



