51nod 1109 01组成的N的倍数 【dfs+剪枝+vector】

来源:互联网 发布:java方法引用 编辑:程序博客网 时间:2024/06/06 03:22

1109 01组成的N的倍数
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题

给定一个自然数N,找出一个M,使得M > 0且M是N的倍数,并且M的10进制表示只包含0或1。求最小的M。
例如:N = 4,M = 100。
Input
输入1个数N。(1 <= N <= 10^6)
Output
输出符合条件的最小的M。
Input示例
4
Output示例
100





代码:

#include<cstdio>#include<vector>#include<queue>#include<cstring>#include<algorithm>using namespace std;bool yu[1000100];struct node{    vector<char> ch;    int shu;}now,qian;int main(){    int n;    scanf("%d",&n);    if(n==1)        printf("1\n");    else    {        queue<node> que;        now.shu=1;        now.ch.push_back('1');        que.push(now);        int a,b;yu[1]=true;        bool fafe=false;        while (true)        {            now=que.front();            que.pop();            a=now.shu*10;            for (int i=0;i<2;i++)            {                b=(a+i)%n;                if (b==0)                {                    for (int i=0;i<now.ch.size();i++)                        printf("%c",now.ch[i]);                    printf("%d\n",i);                    fafe=true;                    break;                }                if (yu[b]) continue;                yu[b]=true;                qian.ch=now.ch;                qian.ch.push_back(i+48);                qian.shu=b;                que.push(qian);            }            if (fafe) break;        }    }    return 0;}


0 0
原创粉丝点击