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;
    }
  • 相关阅读:
    POJ 3667 & HDU 3308 & HDU 3397 线段树的区间合并
    HDU 5992 kd-tree
    BZOJ 4154 kd-tree dfs序 + 二维空间的区间(矩阵)更新单点查找
    BZOJ 4066 kd-tree 矩形询问求和
    BZOJ 1941 kd-tree
    BZOJ 2648 kd-tree模板
    HDU 5925 离散化
    php trait
    php命名空间
    js
  • 原文地址:https://www.cnblogs.com/upstart/p/8982418.html
Copyright © 2011-2022 走看看