2018.9青岛网络预选赛(C)

传送门:Problem C

https://www.cnblogs.com/violet-acmer/p/9664805.html

 

题意:

  定义五个指令,判断能否从输入的n条指令中成功跳出循环,如果不能,输出"No",反之,输出"Yes"。

 

题解:

  判断某个数[0,255]是否重复来到某一指令,如果有,则肯定是个无限循环,输出"No",反之,可以跳出循环,输出"Yes"。

 

AC代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 const int maxn=1e4+10;
 6 
 7 struct Order
 8 {
 9     int v;
10     int k;
11     char que[4];
12 };
13 Order order[maxn];
14 int n;
15 int r;
16 bool vis[maxn][256];//vis[index][r] == true : 数r来到index两次,无限循环
17 
18 void Initial()
19 {
20     scanf("%d",&n);
21     for(int i=1;i <= n;++i)
22     {
23         scanf("%s%d",order[i].que,&order[i].v);
24         if(order[i].que[0] != 'a')
25             scanf("%d",&order[i].k);
26     }
27     r=0;
28     memset(vis,false,sizeof(vis));
29 }
30 bool is_vis(int index,int r)
31 {
32     if(vis[index][r] == false)
33     {
34         vis[index][r]=true;
35         return false;
36     }
37     return true;
38 }
39 bool Process()
40 {
41     int index=1;
42     while(index <= n)
43     {
44         if(order[index].que[1] == 'd')
45         {
46             if(is_vis(index,r))
47                 return false;
48                 
49             r += order[index++].v;
50             r %= 256;
51             continue;
52         }
53         if(is_vis(index,r) == true)//判断某数r是否重复来到某index指令
54             return false;
55         
56         if(order[index].que[1] == 'e')
57             index=(r == order[index].v ? order[index].k:index+1);
58         else if(order[index].que[1] == 'n')
59             index=(r != order[index].v ? order[index].k:index+1);
60         else if(order[index].que[1] == 'l')
61             index=(r < order[index].v ? order[index].k:index+1);
62         else if(order[index].que[1] == 'g')
63             index=(r > order[index].v ? order[index].k:index+1);
64     }
65     return true;
66 }
67 int main()
68 {
69     int T;
70     scanf("%d",&T);
71     while(T--)
72     {
73         Initial();
74         if(Process())
75             printf("Yes\n");
76         else
77             printf("No\n");
78     }
79     return 0;
80 }
View Code

 

posted @ 2018-09-18 14:09  HHHyacinth  阅读(213)  评论(0编辑  收藏  举报