zoukankan      html  css  js  c++  java
  • Codevs 1229 数字游戏

    1229 数字游戏

     

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 白银 Silver
     
     
    题目描述 Description
    Lele 最近上课的时候都很无聊,所以他发明了一个数字游戏来打发时间。  这个游戏是这样的,首先,他拿出几张纸片,分别写上0到9之间的任意数字(可重复写某个数字),然后,他叫同学随便写两个数字X和K。Lele要做的事情就是重新拼这些纸牌,组成数字 T ,并且 T + X 是 K 的正整数倍。 有时候,当纸片很多的时候,Lele经常不能在一节课之内拼出来,但是他又想知道答案,所以,他想请你帮忙写一个程序来计算答案。  
    输入描述 Input Description
    1. 第一行包含两个整数 N和M(0<N<9,0<M<2000),分别代表纸片的数目和询问的数目。  
    2. 第二行包含N个整数分别代表纸片上写的数字,每个数字可能取0~9。  
    3. 接下来有M行询问,每个询问给出两个整数X和K(0<=x<10^9,0<K<100)。 
    输出描述 Output Description
    1. 对于每次询问,如果能够用这些纸片拼出符合答案的T,就输出结果T。如果有多个结果,就输出符合要求的最小的T。  
    2. 如果不能拼出,就输出"None"。  
    样例输入 Sample Input

    4 3 

    1 2 3 4 

    5 7 

    33 6 

    12 8  

    样例输出 Sample Output

    1234

    None

    1324

    数据范围及提示 Data Size & Hint

     

    传送门  

    满分做法是全排列,也不知为啥这题数据能让9!*2000过,可能出题人比较良心吧。。

    代码如下  

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <string>
    #include <cstdio>
    #include <cmath>
    #define INF 1111111111
    using namespace std;
    
    bool f;
    int minn=INF,ans,s[11],z,q,maxn,cs[19],cs1[19],b,t,r,w,x,k,a,n,m,i,j;
    int main()
    {
        ios::sync_with_stdio(false);
        int c;
        cin >> n >> m;
        int p;
        for(i=0;i<n;++i)
        {
            cin>>p;
            s[i]=p;
        }
        for(j=0;j<m;++j)
        {
            cin>>x>>k;
            f=false;
            minn=INF;
            do{
                int v=n;
                ans=0;
                for(i=0;i<n;++i)
                {
                    if(i==0) ans=s[i];
                    else ans=ans*10+s[i];
                }
                if((ans+x)%k==0)
                {
                    minn=min(minn,ans); 
                    f=true;
                }
            } while (next_permutation(s,s+n));
            if(!f)
            cout<<"None"<<endl;
            else cout<<minn<<endl;
        }
    }

    80分暴力 每个大于10^(n-1)小于10^(n-1)*maxn倍数进行枚举 再看看出现次数是否一致 

    仅供参考,最后一点跑1分钟能跑出来。。

    代码 

    #include <iostream>
    #include <cstring>
    #include <string>
    #include <cstdio>
    #include <cmath>
    
    using namespace std;
    
    bool f;
    char s[100000001];
    int z,q,maxn,cs[19],cs1[19],b,t,r,w,x,k,a,n,m,i,j;
    int Pd(int k)
    {
        memset(cs1,0,sizeof(cs1));
        sprintf(s,"%d",k);
        for (j = 0; j < strlen(s); ++j)
            cs1[s[j]-48]++;
        for(j = 1; j<=9 ;++j)
        {
            if(cs1[j]!=cs[j]) return 0;
        }
        return 1;
    }
    int main()
    {
        ios::sync_with_stdio(false);
        int c;
        cin >> n >> m;
        z = pow(10,n-1);
        for (i = 0 ;i < n ;++i)
        {
            cin >> a;
            cs[a]++;
            maxn = max(maxn,a);
        }
        b  = z * (maxn+1);
        for (i = 0 ;i < m ;++i)
        {
            f=false;
            cin >> x >> k;
            q=z/k;
            int c=b/k+1;
            while(q<c)
            {
                ++q;
                t=k*q-x;
                if(Pd(t))
                {
                    f=true;
                    cout << t <<endl;
                    break;
                }
            }
            if(!f)
            {
                cout << "None" << endl;
            }
        }
    }
    点击展开
    我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。
  • 相关阅读:
    Codeforces Round #590 D. Distinct Characters Queries
    线段树模板加模板题POJ3468
    hihoCoder挑战赛5 C 与链
    HDU 5044 Tree 树链剖分
    HYSBZ 1901 Dynamic Rankings 树状数组套主席树
    POJ 2761 Feed the dogs 主席树
    POJ 2104 K-th Number 主席树 区间第K大
    HDU 4547 CD操作 LCA
    POJ 1470 Closest Common Ancestors 离线LCA
    HYSBZ 1036 树的统计Count 树链剖分 线段树
  • 原文地址:https://www.cnblogs.com/ruojisun/p/6218363.html
Copyright © 2011-2022 走看看