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

POJ 1426 Find the Multiple 思路,线性同余,搜索 难度:2

时间:2015-03-14 19:56:00      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

http://poj.org/problem?id=1426

测试了一番,从1-200的所有值都有long long下的解,所以可以直接用long long 存储

从1出发,每次向10*s和10*s+1转移,只存储余数即可,

对于余数i,肯定只有第一个余数为i的最有用,只记录这个值即可

 

#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int maxn=222;
typedef long long ll;
ll dp[maxn];
int n;
queue<int >que;
int main(){
        while(scanf("%d",&n)==1&&n){
                if(n==1){puts("1");continue;}
                memset(dp,-1,sizeof(dp));
               while(!que.empty())que.pop();
               dp[1]=1;
               que.push(1);
               bool fl=false;
               while(!que.empty()){
                        int s=que.front();que.pop();
                        if(s==0){
                                printf("%I64d\n",dp[s]);
                                fl=true;
                                break;
                        }
                        int t=s*10%n;
                        if(dp[t]==-1){
                                dp[t]=10*dp[s];
                                que.push(t);
                        }
                        t=(s*10+1)%n;
                        if(dp[t]==-1){
                                dp[t]=10*dp[s]+1;
                                que.push(t);
                        }
                }
               if(!fl)puts("-1");
        }
        return 0;
}

  

POJ 1426 Find the Multiple 思路,线性同余,搜索 难度:2

标签:

原文地址:http://www.cnblogs.com/xuesu/p/4337974.html

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