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;
    }
  • 相关阅读:
    POJ 3268 Silver Cow Party (Dijkstra)
    怒学三算法 POJ 2387 Til the Cows Come Home (Bellman_Ford || Dijkstra || SPFA)
    CF Amr and Music (贪心)
    CF Amr and Pins (数学)
    POJ 3253 Fence Repair (贪心)
    POJ 3069 Saruman's Army(贪心)
    POJ 3617 Best Cow Line (贪心)
    CF Anya and Ghosts (贪心)
    CF Fox And Names (拓扑排序)
    mysql8.0的新特性
  • 原文地址:https://www.cnblogs.com/Dicer/p/9670915.html
Copyright © 2011-2022 走看看