PTA----->交保护费

一,题目:

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;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值