`
zsybupt
  • 浏览: 41481 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

boj 62

    博客分类:
  • oj
 
阅读更多

Description

    champ最近发现了一种奇怪的数,这种数是由m个连续的x后面跟上n个连续的y组成的十进制数,形如xxx...xxxyyy...yyy并且满足条件(0 < x <= 9, 0 <= y <= 9, x!=y)。
    由于这种数的特性,champ把这种数叫做二部数。
    现在champ有一个正整数K,他希望找到一个最小的(x,y)二部数使得它是champ给出的正整数的整数倍。



Input
第一行测试组数 N
N行,每行三个数 K x y (0 < K <= 65536,x和y满足描述中的条件)


Output
N行,如果结果存在,两个数m n,以空格分隔。如果结果不存在,输出"No such number!" 

Sample Input

4
370 1 0
500 3 4
573 5 7
9997 5 9



Sample Output

3 1
No such number!
22 16
48 36



Source
champ

 

对于xxxx,可以构造出xxxxy和xxxxx,通过bfs,位数从2开始,构造二部数,需要注意x和y的大小关系,找出最小的二部数

代码:

#include<stdlib.h>
#include<stdio.h>
#include<queue>
using namespace std;
#define N 65536
bool flag[N];
bool flagx[N];
struct node{
	int x;
	int y;
	int num;
	bool flagx;
};
int main()
{
	int n;
	scanf("%d",&n);
	while(n--)
	{
		int k,x,y,numx = -1,numy = -1;
		memset(flag,0,sizeof(flag));
		memset(flagx,0,sizeof(flagx));
		queue<node>q;
		scanf("%d %d %d",&k,&x,&y);
		node tmp;
		tmp.x = 1;
		tmp.y = 0;
		tmp.num = x%k;
		tmp.flagx = true;
		q.push(tmp);
		while(q.size()!=0)
		{
			node temp = q.front();
			if(numx!=-1&&numx+numy<temp.x+temp.y)break;
			int num = (temp.num*10+y)%k;
			if(num==0)
			{
				if(numx==-1||numx+numy>temp.x+temp.y+1)
				{
					numx = temp.x;
					numy = temp.y+1;
				}
				else if(numx+numy==temp.x+temp.y+1)
				{
					if((x>y&&numx>temp.x)||(x<y&&numx<temp.x))
					{
						numx = temp.x;
						numy = temp.y+1;
					}
				}
			}
			else
			{
				if(temp.flagx==true)
				{
					int tmpnum = (temp.num*10+x)%k;
					if(flagx[tmpnum]==false)
					{
						tmp.x = temp.x+1;
						tmp.y = temp.y;
						tmp.num = tmpnum;
						tmp.flagx = temp.flagx;
						q.push(tmp);
					}
					flagx[tmpnum] = true;
				}
				if(flag[num]==false)
				{
					flag[num] = true;
					temp.y++;
					temp.num = num;
					temp.flagx = false;
					q.push(temp);
				}
			}
			q.pop();
		}
		if(numx==-1)printf("No such number!\n");
		else printf("%d %d\n",numx,numy);
	}
}

 

分享到:
评论

相关推荐

    BOJ题目1023. Ancient Keyboard 源代码

    BOJ的题目1023. Ancient Keyboard解法 源代码

    boj 0809复试模拟题答案

    boj 上08 09 年复试模拟题的答案

    JAVA_BOJ

    JAVA_BOJ

    boj:算法

    boj:算法

    Algorithm-BOJ.zip

    Algorithm-BOJ.zip,BekJon在线法官(Java,Kotlin,SWIFT)和PS路线图,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。

    BOJ

    BOJ

    Algorithm-BOJ-PSJ.zip

    Algorithm-BOJ-PSJ.zip,Baykon在线判断JAVA问题解决方法(第二章),算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。

    Algorithm-BOJ-AutoCommit.zip

    Algorithm-BOJ-AutoCommit.zip,当您解决baekjoon online judge的问题时,它会自动提交并推送到远程存储库。,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。

    Algorithm-boj-auto-submit.zip

    Algorithm-boj-auto-submit.zip,日本央行cli提交脚本,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。

    Python库 | boj-0.0.1.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:boj-0.0.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Boj Coloring Book-crx插件

    通过这本图画书展示您的创造力,其中包括Boj和朋友。 一本有趣的,全数字化且可重复使用的着色书,可用于 通过这本图画书展示您的创造力,其中包括Boj和朋友。 一本有趣的全数字可重复使用的图画书,专为孩子,父母...

    boj.kr:解决boj.kr的问题

    解决问题 Boj.kr

    BOJ:日本央行

    BOJ:日本央行

    boj:算法求解

    boj:算法求解

Global site tag (gtag.js) - Google Analytics