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

    题意:

      找到一个n的倍数,这个数不能含有m个后续数字中的任何一个

    题解:

    #include<stdio.h>
    #include<string.h>
    #include<queue>
    using namespace std;
    queue<int>que;
    int used[10];
    int flag[10010],pre[10010],value[10010];
    int n,m;
    void print(int n)
    {
        if(n!=-1)
        {
            print(pre[n]);
            printf("%d",value[n]);
        }
    }
    void bfs()
    {
        for(int i=1; i<=9; i++)
        {
            if(!used[i]&&!flag[i%n])
            {
                que.push(i%n);
                flag[i%n]=1;
                pre[i%n]=-1;
                value[i%n]=i;
            }
        }
        while(!que.empty())
        {
            int temp=que.front();
            if(temp==0)
            {
                print(pre[temp]);
                printf("%d
    ",value[temp]);
                return ;
            }
            else
                for(int i=0; i<=9; i++)
                {
                    if(!used[i]&&!flag[(temp*10+i)%n])
                    {
                        que.push((temp*10+i)%n);
                        flag[(temp*10+i)%n]=1;
                        pre[(temp*10+i)%n]=temp;
                        value[(temp*10+i)%n]=i;
                    }
                }
            que.pop();
        }
        printf("-1
    ");
        return ;
    }
    int main()
    {
        int ncase=1,m1;
        while(scanf("%d %d",&n,&m)!=EOF)
        {
            memset(used,0,sizeof(used));
            memset(flag,0,sizeof(flag));
            while(!que.empty())
                que.pop();
            for(int i=0; i<m; i++)
            {
                scanf("%d",&m1);
                if(!used[m1])
                    used[m1]=1;
            }
            printf("Case %d: ",ncase++);
            bfs();
        }
        return 0;
    }

    广搜,同余剪枝

     A=MX+R
    B=NX+R
    假设A,B对于X的余数相同
    那么
    (10*A+d[i])%x
    (10*B+d[i])%x
    的意义是一样的,所以只有当余数没出现过的情况下才加入到搜索的队列中来
  • 相关阅读:
    oracle视图总结(转)
    tomcat web.xml 配置
    绑定命令的具体应用
    oracle数据导入的常用命令
    hibernate学习笔记6--Criteria查询方式、完整小练习(开发步骤)
    Github常见错误
    排序函数中比较函数cmp的理解
    Hdu 4143
    Wireshark 基本使用方法
    Valgrind 初次接触
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3400077.html
Copyright © 2011-2022 走看看