zoukankan      html  css  js  c++  java
  • こだわり者いろはちゃん / Iroha's Obsession AtCoder

    Problem Statement

     

    Iroha is very particular about numbers. There are K digits that she dislikes: D1,D2,…,DK.

    She is shopping, and now paying at the cashier. Her total is N yen (the currency of Japan), thus she has to hand at least N yen to the cashier (and possibly receive the change).

    However, as mentioned before, she is very particular about numbers. When she hands money to the cashier, the decimal notation of the amount must not contain any digits that she dislikes. Under this condition, she will hand the minimum amount of money.

    Find the amount of money that she will hand to the cashier.

    Constraints

     

    • 1≦N<10000
    • 1≦K<10
    • 0≦D1<D2<…<DK≦9
    • {D1,D2,…,DK}≠{1,2,3,4,5,6,7,8,9}

    Input

     

    The input is given from Standard Input in the following format:

    N K
    D1 D2DK
    

    Output

     

    Print the amount of money that Iroha will hand to the cashier.

    Sample Input 1

     

    1000 8
    1 3 4 5 6 7 8 9
    

    Sample Output 1

     

    2000
    

    She dislikes all digits except 0 and 2.

    The smallest integer equal to or greater than N=1000 whose decimal notation contains only 0 and 2, is 2000.

    Sample Input 2

     

    9999 1
    0
    

    Sample Output 2

     

    9999

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    const int maxn = 1010;
    int A[maxn],cnt = 0,
    B[maxn],C[maxn],ans=0;
    int check(int x)
    {
        memset(A,0,sizeof(A));
        cnt = 0;
        if(x != 0)
        while(x)
        {
           A[cnt++] = x%10;
           x/=10;
        }
        else{
            A[0] = 0;
            cnt++;
        }
        for(int i=0;i<cnt;i++){
            for(int j=0;j<ans;j++ ){
                if(A[i] == C[j])
                    return 0;
            }
    
        }
        return 1;
    
    }
    int main()
    {
        int n,sum;
        cin>>sum>>n;
        memset(B,0,sizeof(B));
        for(int i=0;i<n;i++){
            int temp;
            cin>>temp;
            B[temp] = 1;
        }
        ans = 0;
        for(int i=0;i<10;i++)
        {
            if(B[i]==1)
                C[ans++]=i;
        }
        for(int i=sum;i<100010;i++)
        {
            if(check(i)){
                cout<<i<<endl;
                break;
            }
        }
        return 0;
    }
  • 相关阅读:
    Hibernate 再接触 事务隔离机制
    Hibernate 再接触 一级缓存 二级缓存 查询缓存
    Hibernate 再接触 性能优化
    Hibernate 再接触 HQL
    Hibernate 再接触 树状结构设计以及学生课程成绩表的设计
    DotNetBar.MetroTilePanel 样式、加载数据、获取数据
    C# superGridControl 样式设置、加载数据、获取数据
    system.data.oracleclient 需要 8.17 需要oracle客户端问题
    程序员必备
    LinQ to sql
  • 原文地址:https://www.cnblogs.com/upstart/p/8982418.html
Copyright © 2011-2022 走看看