zoukankan      html  css  js  c++  java
  • HDU 4474 Yet Another Multiple Problem

    精妙,涨姿势了!!


    #include<stdio.h>
    #include<string.h>
    #include<queue>
    #define N 10100
    using namespace std;
    int pre[N],num[N],a[10];
    int n,m,x;
    void init()
    {
        memset(pre,-1,sizeof(pre));
        memset(num,-1,sizeof(num));
        memset(a,0,sizeof(a));
    }
    void print(int u)
    {
        if (pre[u]!=-1) print(pre[u]);
        printf("pre[%d] = %d, num = %d
    ",u, pre[u], num[u]); //其实就是一个数分解成单个数输出
    }
    int bfs()
    {
        int i,j,t;
        queue<int>q;
        for (i=1;i<10;++i)
        {
            if (!a[i])
            {
                t=i%n;
                if (t==0) { printf("%d",i);return 0;}
                q.push(t);
                num[t] = i;
            }
        }
        while (!q.empty())
        {
            int u=q.front();
            q.pop();
            //printf("u = %d	", u);
            for (i=0;i<10;++i)
            {
                if (!a[i])
                {
                    t=(10*u + i)%n;//这样做得到的数一定不含那m个数的任何一个,除模相当于剪枝,
                    if (num[t]==-1)
    				{
    					q.push(t);
    					pre[t]=u;
    					num[t]=i;
    				}
                    if (t==0)
                    {
                    	printf("# %d #", 10*u*i);
                        print(t);
                        return 0;
                    }
                }
            }
        }
        printf("-1");
        return 0;
    }
    int main ()
    {
    	//freopen("2.txt", "w", stdout);
        int i,j,k=0;
        while (scanf("%d%d",&n,&m)!=EOF)
        {
            init();
            while (--m>=0)
            {
                scanf("%d",&x);
                a[x]=1;
            }
            printf("Case %d: ",++k);
            bfs();
            printf("
    ");
        }
        return 0;
    }
    



    www.cnblogs.com/tenlee
  • 相关阅读:
    二分图的判定 (图)
    并查集(模板)
    数独 (dfs)
    Map <STL>
    Set <STL>
    二叉搜索树的实现
    Find a way (BFS)
    根据输入的变量,执行相应的计算公式并返回结果
    检测字符串当中x与o的数目是否相等
    根据给定的数字和字符串,生成循环指定次数的字符串
  • 原文地址:https://www.cnblogs.com/tenlee/p/4420120.html
Copyright © 2011-2022 走看看