一,题目:
RainSure同学对数字非常敏感,他有m个不喜欢的数字,分别是D1,D2,⋯,Dm
RainSure同学需要定期向HBU里的黑社会老大Arbalest提交保护费,并且每次不得少于n元,否则下场就会很惨。。。
同时,RainSure同学希望他提交的保护费在十进制表示中不能出现他不喜欢的数字。
请你告诉他,他每次最少需要交多少钱,保护费要求是一个正整数,因为Arbalest
不喜欢小数点。
输入格式
第一行包含两个正整数分别为n和m。
第二行m个数字,表示RainSure同学不喜欢的数字。
1≤n<10000
1≤m<10
0≤D1<D2<D3,⋯,Dm≤9
{D1,D2,⋯,Dm}!=1,2,3,4,5,6,7,8,9
输出格式
输出一个正整数,代表每次最少需要提交的保护费。
测试样例一
1000 8
1 3 4 5 6 7 8 9
2000
样例说明,首先,RainSure至少需要提交1000元的保护费,并且十进制表示下只能包括0和2。大于等于1000的最小的只包括0和2的数字就是2000。所以,答案为2000.
测试样例二
9999 1
0
9999
二,代码:
#include <iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<set>
#include<stack>
#include<queue>
#include<map>
using namespace std;
const int N=2e5+10,M=1e9+7;
typedef long long ll;
typedef pair<int,int> pii;
int st[100];
void Solved() {
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++){
int x;
cin>>x;
if(x<10) st[x]=1;
}
//直接从n开始枚举所有的钱
for(int i=n;i<=100000;i++){
int flag=1;
int t=i;
//判断是否合法
while(t) {
if(st[t%10]==1) {
flag=0;
break;
}
t/=10;
}
if(flag==1){
cout<<i<<endl;
break;
}
}
}
int main()
{
int t;
t=1;
while(t--) {
Solved();
}
return 0;
}