题意:执行五步操作,看最终能否跳出循环。
思路:模拟。。。。
每一步最多走256次,当有一步的次数超过256时,一定为死循环。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
struct node
{
char s[10];
int k,v;
};
int t;
int main()
{
scanf("%d",&t);
while(t--)
{
int n;
node p[10010];
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s%d",p[i].s,&p[i].v);
if(strcmp(p[i].s,"add")!=0)
scanf("%d",&p[i].k);
}
int j=1,flag=0,vis[10010]={0},r=0;
while(1)
{
vis[j]++;
if(strcmp(p[j].s,"add")==0)
{
r=(r+p[j].v)%256;
j++;
}
else if(!strcmp(p[j].s,"beq"))
{
if(r==p[j].v)
j=p[j].k;
else j++;
}
else if(!strcmp(p[j].s,"bne"))
{
if(r!=p[j].v)
j=p[j].k;
else j++;
}
else if(!strcmp(p[j].s,"blt"))
{
if(r<p[j].v)
j=p[j].k;
else j++;
}
else if(!strcmp(p[j].s,"bgt"))
{
if(r>p[j].v)
j=p[j].k;
else j++;
}
if(j>n)
{
flag=1;
break;
}
if(vis[j]>=256) break;//下一步走第j步,但第j步已经走了256次了,所以为死循环
}
if(flag)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}