SDNU__1052.水题3


lg是妹子,这是大家众所周知的
但是lg有个恶趣味估计没人知道
好吧既然没有人知道就算了的吧
lg有的机器人,机器人能按照遥控器的指令来进行运动
具体的指令如下:
H&*^kf30pq 机器人走一步
f03u5klfj# 机器人走两步
lsuf9823ur 机器人走三步
skhf9832ht 机器人走四步
jdsifu9w8e 机器人退回起点
%^Ihdfskjf 机器人启动自爆倒计时
#$%^%$^cxk 机器人结束自爆倒计时
$#%^#$tids 机器人发动自爆
98dfgoier# 机器人随机跑到某个角落
当机器人启动自爆倒计时的时候,在执行了10条其他非结束或发动自爆指令之后会自动爆炸
如果发动自爆的话直接自爆,如果机器人接收到随机跑到某个角落的指令,则会找不到其位置所在
现在遥控器在syc手里,lg想将其机器人收回,但是他只有syc的指令集,所以请你判断一下机器人能否找回来


Input


相关的指令


Output


如果lg能确切知道机器人走了多少步,且机器人没有自爆,那么是可以找回来的,输出Y,否则输出N


Sample Input


%^Ihdfskjf
lsuf9823ur
lsuf9823ur
lsuf9823ur
H&*^kf30pq
#$%^%$^cxk
98dfgoier#
jdsifu9w8e


Sample Output


Y


这个题用map和switch做就很好做了,判断条件题目描述的也很清楚

有一个地方容易注意不到的是——机器人跑到某个角落后并不一定输出为N

还有可能输入退回起点的指令

#include
#include
#include
using namespace std;

int main()
{
map a;
string s1;
a["H&*^kf30pq"] = 1;
a["f03u5klfj#"] = 2;
a["lsuf9823ur"] = 3;
a["skhf9832ht"] = 4;
a["jdsifu9w8e"] = 0;
a["%^Ihdfskjf"] = 5;//开始
a["#$%^%$^cxk"] = 6;//结束
a["$#%^#$tids"] = 7;//爆炸
a["98dfgoier#"] = 8;//跑了
//%^Ihdfskjf//开始
//lsuf9823ur
//lsuf9823ur
//lsuf9823urstep= 9;cnt = 3
//H&*^kf30pqstep = 10 cnt = 4
//#$%^%$^cxkstep = 10 cnt = 0
//98dfgoier# //跑了
//jdsifu9w8e
int step = 0;
int endflag = 0 , endcnt = 0;
int retflag = 0;
int stepflag = 0;
while(cin>>s1)
{
int cop = a[s1];
switch (cop)
{
case 1 : step++; if(endflag) endcnt++;break;
case 2 : step = step + 2;if(endflag) endcnt++;break;
case 3 : step = step + 3;if(endflag) endcnt++;break;
case 4 : step = step + 4;if(endflag) endcnt++;break;
case 0 : step = 0;stepflag = 0;if(endflag) endcnt++;break;
case 5 : endflag = 1;break;
case 6 : endflag = 0; endcnt = 0;break;
case 7 : retflag = 1;break;
case 8 : stepflag = 1;break;
}
if(endcnt == 10 )
{
retflag = 1;
}
s1.clear();
}
if(retflag == 1 || stepflag == 1)
{
cout<<"N"< }
else if(retflag == 0 && stepflag == 0)
{
cout<<"Y"< }


return 0;
}

你可能感兴趣的:(SDNUOJ)