zoukankan      html  css  js  c++  java
  • HDU 1226 超级password

    跟POJ 1465 multiple 类是。仅仅只是多了2个条件,长度不能超过500。还有就是 可能不是十进制。


    bfs+同余定理,就是用 mod 来判重。

    G++ 15ms


    每次枚举一位,然后记录下路径然后输出就能够。



    此题坑点 当n==0 的时候 假设 m个数中有0 那么答案就是0 假设没有0 就是give me the bomb please

    这儿坑了我好几次。


    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<queue>
    #include<algorithm>
    #include<map>
    #include<stack>
    #include<iostream>
    #include<list>
    #include<set>
    #include<vector>
    #include<cmath>
    
    #define INF 0x7fffffff
    #define eps 1e-8
    #define LL long long
    #define PI 3.141592654
    #define CLR(a,b) memset(a,b,sizeof(a))
    #define FOR(i,a,n) for(int i= a;i< n ;i++)
    #define FOR0(i,a,b) for(int i=a;i>=b;i--)
    #define pb push_back
    #define mp make_pair
    #define ft first
    #define sd second
    #define acfun std::ios::sync_with_stdio(false)
    
    #define SIZE 500+1
    using namespace std;
    
    int n,c,m;
    int a[17];
    
    struct lx
    {
        int x,mod;
        int len;
        int path;
        void init(int xx,int mm,int ll,int pp)
        {
            x=xx,mod=mm,len=ll,path=pp;
        }
    }q[5001];
    
    void bfs()
    {
        int h=0,e=0;
        bool vis[5001];
        CLR(vis,0);
        lx tmp;
        tmp.init(-1,0,0,-1);
        q[h++]=tmp;
        while(e<h)
        {
            tmp=q[e++];
    
            if(tmp.mod==0&&tmp.x!=-1)
            {
                stack<char>out;
                while(tmp.path!=-1)
                {
                    char temp;
                    if(tmp.x<10&&tmp.x>=0)
                        temp=tmp.x+'0';
                    else
                        temp=tmp.x-10+'A';
                    out.push(temp);
                    tmp=q[tmp.path];
                }
                while(!out.empty())
                {
                    printf("%c",out.top());
                    out.pop();
                }
                printf("
    ");
                return;
            }
    
            FOR(k,0,m)
            {
                int num=tmp.mod*c+a[k];
                int mod=num%n;
                if(a[k]==0&&tmp.len==0)continue;
                if(vis[mod]||tmp.len>=500)continue;
                lx now;
                vis[mod]=1;
                now.init(a[k],mod,tmp.len+1,e-1);
                q[h++]=now;
            }
        }
        puts("give me the bomb please");
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d%d",&n,&c,&m);
            FOR(i,0,m)
            scanf("%X",&a[i]);
            sort(a,a+m);
            if(n==0)
            {
                if(a[0]==0)
                puts("0");
                else
                puts("give me the bomb please");
                continue;
            }
            bfs();
        }
    }
    


  • 相关阅读:
    Tomcat原理与实践
    Spring Boot入门与实践
    Docker安装及使用
    JDK源码解析——集合(一)数组 ArrayList
    浅谈mysql底层索引
    微信小程序全局配置知识点
    uniapp全屏高度
    npm node-sass报错
    微信小程序接口配置问题
    微信小程序的设计流程
  • 原文地址:https://www.cnblogs.com/llguanli/p/6907982.html
Copyright © 2011-2022 走看看