首页 > 其他 > 详细

POJ 1426 Find The Multiple(不断学习!)

时间:2014-04-06 15:08:43      阅读:496      评论:0      收藏:0      [点我收藏+]

【题意简述】:输入一个数,找出它的一个倍数,这个倍数只能用0和1表示。

【思路】:一开始想到的是用简单的朴素的BFS,用队列帮助实现,可是超时!这个是超时代码:

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;

__int64 bfs(int m)
{
	queue<__int64> q;
	__int64 temp;
	q.push(1);
	while(!q.empty())
	{
		temp = q.front();
		q.pop();
		if(temp%m == 0)
			return temp;
		q.push(temp*10+1);
		q.push(temp*10);
	}
	return 0;
}

int main()
{
	int n;
	while(cin>>n&&n)
	{
		cout<<bfs(n)<<endl;
	}
	return 0;
}

后来学习别人的解题报告找到优化的方法!每一步都可以取余,解决了大数问题!这个代码是别人的:優YoU  http://user.qzone.qq.com/289065406/blog/1303946967

//Memory Time
//2236K  32MS 

#include<iostream>
using namespace std;

int mod[524286];  //保存每次mod n的余数
                  //由于198的余数序列是最长的
                  //经过反复二分验证,436905是能存储198余数序列的最少空间
                  //但POJ肯定又越界测试了...524286是AC的最低下限,不然铁定RE

int main(int i)
{
	int n;
	while(cin>>n)
	{
		if(!n)
			break;

		mod[1]=1%n;  //初始化,n倍数的最高位必是1

		for(i=2;mod[i-1]!=0;i++)  //利用同余模定理,从前一步的余数mod[i/2]得到下一步的余数mod[i]
			mod[i]=(mod[i/2]*10+i%2)%n;
		             //mod[i/2]*10+i%2模拟了BFS的双入口搜索
		             //当i为偶数时,+0,即取当前位数字为0  。为奇数时,则+1,即取当前位数字为1

		i--;
		int pm=0;
		while(i)
		{
			mod[pm++]=i%2;   //把*10操作转化为%2操作,逆向求倍数的每一位数字
			i/=2;
		}
		while(pm)
			cout<<mod[--pm];  //倒序输出
		cout<<endl;
	}
	return 0;
}


这个代码也是可以AC的:From: http://www.cnblogs.com/crazyapple/archive/2013/06/03/3116169.html

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
 
 __int64 mod[600000];
 
int main()
{
     int n;
     while(~scanf("%d",&n)&&n)
     {
         int i;
         for(i=1;;i++)
         {
             mod[i]=mod[i/2]*10+i%2;
             if(mod[i]%n==0)
             {
                 break;
             }
         }
         printf("%I64d\n",mod[i]);
     }
     return 0;
}



POJ 1426 Find The Multiple(不断学习!),布布扣,bubuko.com

POJ 1426 Find The Multiple(不断学习!)

原文:http://blog.csdn.net/u013749862/article/details/23021001

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!