zoukankan      html  css  js  c++  java
  • C题——Halting Problem(补题)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4049

    题解:题目要求判断是否会停止,r的状态共256种,i的状态共1e5种,用一个二维数组来标记状态,保证每个状态只出现一次,若出现两次,则会出现循环;

    读题后先判断题目的状态数,根据状态数,计算复杂度,设计合适的算法;

    细节问题:开始忘了加else,导致前面的 i f 改变了 i,后面又进入 i f 时 i  的值已被改变,不要手懒不写else;

    #include<cstdio>
    #include<cstring> 
    typedef struct NODE{
        char s[10];
        int v;
        int k;
    } Node;
    
    Node step[10005];
    
    int vis[260][10005];
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int m;
            int r = 0;
            int flag = 0;
            memset(vis,0,sizeof(vis));
            scanf("%d",&m);
            for(int i = 1;i <= m;i++)
            {
                char st[3];
                scanf("%s",st);
                int vt;
                scanf("%d",&vt);
                if(st[1] == 'd')        //如果是add只有2个成员 
                {
                    strcpy(step[i].s,st);
                    step[i].v = vt;
                }
                else
                {
                    int kt;
                    scanf("%d",&kt);
                    strcpy(step[i].s,st);
                    step[i].v = vt;
                    step[i].k = kt;
                }
            }
            int i = 1;
            while(i <= m)
            {
                if(step[i].s[1] == 'd')
                {
                    r = (r + step[i].v) % 256;
                    i++;                                
                }
                else if(step[i].s[1] == 'e')
                    {
                        if(r == step[i].v)
                            i = step[i].k;
                        else
                        i++;
                    }
                else if(step[i].s[1] == 'n')
                    {
                        if(r != step[i].v)
                            i = step[i].k;
                        else
                        i++;
                    }
                else if(step[i].s[1] == 'l')
                    {
                        if(r < step[i].v)
                            i = step[i].k;
                        else
                        i++;
                    }
                else if(step[i].s[1] == 'g')
                    {
                        if(r > step[i].v)
                            i = step[i].k;
                        else
                        i++;
                    }
                if(vis[r][i] != 0)
                    {
                        printf("No
    ");
                        flag = 1;
                        break;
                    }
                vis[r][i] = 1;
            }
            if(flag == 0)
            {
                printf("Yes
    ");
            }
            
        }
        return 0;
    }
  • 相关阅读:
    zbb20190605 maven windows配置maven私服以及使用
    zbb20190528 城市经纬度json
    zbb20190528 adcode 城市编码
    zbb20190430 springboot 配置alimq
    zbb20190408 spring-boot-maven-plugin 插件的作用详解
    zbb20190131 Mybatis,mysql映射文件<!CDATA[[]]> 转义问题
    Spring Boot (29) 定时任务
    Spring Boot (28) actuator与spring-boot-admin
    Spring Boot (27) actuator服务监控与管理
    Java 8
  • 原文地址:https://www.cnblogs.com/Dicer/p/9670915.html
Copyright © 2011-2022 走看看