• 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
    ");
    76         else
    77             printf("No
    ");
    78     }
    79     return 0;
    80 }
    View Code
  • 相关阅读:
    我常用到的前端工具
    三级菜单
    voxel安装2
    voxel安装
    Linux 安装 nginx
    pip DEPRECATION: The default format will switch to columns”错误
    Python升级安装的一些问题
    Linux下修改Apache即httpd的端口
    Linux中yum命令镜像源和出错解决方案
    Linux 别名 Apache
  • 原文地址:https://www.cnblogs.com/violet-acmer/p/9668585.html
Copyright © 2020-2023  润新知