N的倍数
题目
一个整数能够被另一个整数整除,那么这个整数就是另一整数的倍数!
大哈和小羽去逛夜市,路过一家摆地摊,玩的游戏叫做N的倍数。一开始老板让大哈选一个正整数n,大哈选好之后,老板给出m个号码球,号码的范围在0~9之间,这m个号码互不相同。大哈需要在1秒钟时间快速说出一个数,这个数既要满足各个位上没有老板给出的号码球中的数字之外的数字,又要满足是n的正整数倍。这样的数可能有很多,老板说一定要说出其中最小的那个。老板说如果大哈能在1秒钟说出来,就送出一个玩具熊。大哈接着问到,那万一没有这样的数怎么办?老板说,那我也直接送你一个。现在请冰雪聪明的你帮助大哈拿到玩具熊。
输入格式:
第一行两个正整数 n 和 m (1≤n≤49991≤m≤10)
接下来m行,每行一个号码,号码的范围在0~9之间
输出格式:
输出这个倍数,如果无解则输出0。
样例输入:
4999 4
7
6
9
0
样例输出:
60007996
数据范围:
1≤N≤4999
时间限制:
1000
空间限制:
65536
提示:
约束条件:
在所有的测试数据中答案都不会超过500位。
分析
我们要想办法将组数与广搜联系在一起……
广搜是一层一层搜索的,在这道题目里,第一层是一位数,第二层是两位数,以此类推
所以广搜可以这样做:结构体内存余数和现在的数,放进所有的一位数,一个一个判断余数(是否为0+有没有搜到过+标记),如果余数是0,直接输出并返回;如果不是0但是以前没有搜到过,将余数放进结构体并标记;如果余数不是0并且这个余数以前搜到过,不用做任何事情
判断完成之后,在这个数后面依次添加上那几个限定的数(例如12变121),这样可以保证是从小打到搜索的,第一个满足条件的必定就是答案
但是,有几点需要特别注意:
①要先将限定的一位数排序,再push进队列
②答案可能超过long long的范围(提示也给了),所以需要用字符串存每次的答案
③不要忘记如果没有输出0
代码
#include<bits/stdc++.h>
using namespace std;
int n,m,vis[5005]={