码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 4474数位搜索

时间:2015-05-16 11:45:02      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

换种思考角度

在符合数字排列组合的情况下,观察数字是否为n的倍数。

于是从小到大查找,通过bfs状态转换。

循环节为n。表达困难,还请看代码

技术分享
#include <algorithm>
#include <string.h>
#include <ctype.h>
#include <stdio.h>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <set>
#include<cstdlib>
#include<math.h>
#include<iostream>
#include<limits.h>
#define ll long long
#define clr(a,b) memset(a,b,sizeof(a))
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1

using namespace std;

int n,m;
int a[10];
int num[10005];//记录每位余数的真实数;
int ans[10005];
int pre[10005];
int c = 0;
void init()
{
    clr(a,0);
    clr(num,-1);
    clr(pre,-1);
}

void pri(int t)
{
    int c = 0;
    while(pre[t]!=-1)
    {
        ans[c++] = num[t];
        t = pre[t];
    }
    ans[c] = num[t];
    for(int j = c; j >= 0; j--)
        printf("%d",ans[j]);
}

void bfs()
{
    int t;
    queue <int> q;
    for(int i = 1; i < 10; i++)//queue预装1-9
    {
        if(!a[i])
        {
            t = i%n;
            if(t==0){printf("%d",i);return;}
            if(num[t]==-1)
            {
                q.push(t);num[t] = i;
            }
        }
    }

    //按位由小到大搜索
    while(!q.empty())
    {
        int u = q.front();
        q.pop();
        for(int i =0;i<10; i++)
        {
            if(!a[i])
            {
                t = (u*10+i)%n;
                if(num[t]==-1)
                {
                    num[t] = i;
                    pre[t] = u;
                    q.push(t);
                }
                if(t==0)
                {
                    pri(t);
                    return;
                }

            }
        }
    }

    printf("-1");
}

int main()
{
    int kase = 1;
    while(~scanf("%d%d",&n,&m))
    {
        init();
        int x;
        for(int i =1; i <= m; i++)
        {
            scanf("%d",&x);
            a[x] = 1;
        }
        printf("Case %d: ",kase++);
        bfs();
        printf("\n");
    }
}
View Code

 

hdu 4474数位搜索

标签:

原文地址:http://www.cnblogs.com/Lzy2015/p/4507512.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!