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;
    }
  • 相关阅读:
    iOS
    iOS
    iOS
    Xcodeproject详解
    Swift
    iOS
    iOS
    错误 1 无法将文件“objDebugXXX.exe”复制到“binDebugXXX.exe”。文件“binDebugXXX.exe”正由另一进程使用,因此该进程无法访问该文件
    【转载】SQL注入原理讲解
    在“安装”阶段发生异常。 System.Security.SecurityException: 未找到源,但未能
  • 原文地址:https://www.cnblogs.com/Dicer/p/9670915.html
Copyright © 2011-2022 走看看