• uva725_一道水题(优化到了29ms)



    ///////////////////////////////////////////////////////////////////////////////////////////////////////
    作者:tt2767
    声明:本文遵循下面协议自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0
    查看本文更新与讨论请点击:http://blog.csdn.net/tt2767
    链接被删请百度: CSDN tt2767
    ///////////////////////////////////////////////////////////////////////////////////////////////////////


    能够用 n * fghij 去枚举 abcde 判重就可以

    由于fghij 可能自身反复较多。能够先判掉。节省时间;

    假设不写成函数的形式还能更快一些。由于第二次判段中x,已经推断过了。

    书中的做法是把两个数字化成字符串去。排序后推断用时
    123ms

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    //////////////////////
    #include<iostream>
    #include<algorithm>
    #include<string>
    #include <iterator>
    #include<sstream>
    #include<functional>
    #include<numeric>
    ///////////////////////
    #include<vector>
    #include<map>
    #include <stack>
    #include<queue>
    #include<set>
    #include <bitset>
    #include <list>
    using namespace std;
    #define lch(x)  ((x) << 1)
    #define rch(x) ((x)<<1|1)
    #define dad(x) ((x)>>1)
    #define lowbit(x) ((x)&(-x))
    typedef  long long int LL;
    const int INF = ~0U>>1;
    const double eps = 1e-6;
    const long double PI = acos(0.0) * 2.0;
    //const int N = 10 + ;
    const int MAX = 98765,MIN = 1234;
    bool check(int x , int l1,int y ,int l2);
    int main()
    {
        //ios::sync_with_stdio(false);
    #ifdef ONLINE_JUDGE
    #else
        freopen("in.txt", "r", stdin);
        freopen("out3.txt", "w", stdout);
    #endif
        int n;
        int tot = 0;
        while(scanf("%d",&n)==1&& n)
        {
            if(tot++)  puts("");
            bool flag=1;
            for(int  i = MIN ; i<= MAX ; i++)
            {
                int l1 = log10(i)+1;
                if(!check(i,l1,-1,-1))   continue;
                int j = i*n;
                int l2 = log10(j)+1;
                if(j>MAX)       break;
                if(!check(i,l1,j,l2))   continue;
                flag = 0;
                printf("%05d / %05d = %d
    ",j,i,n);
            }
            if(flag)
                printf("There are no solutions for %d.
    ", n);
        }
        return 0;
    }
    
    bool check(int x , int l1,int y ,int l2)
    {
        bool re[10];
        memset(re,0,sizeof(re));
        if(l1==4&&l2==4)    return 0;
        if(l1==4 || l2==4)    re[0]=1;
        while(x)
        {
            if(re[x%10])   return 0;
            re[x%10] = 1;
            x/=10;
        }
        if(y != -1)
        while(y)
        {
            if(re[y%10])   return 0;
            re[y%10] = 1;
            y/=10;
        }
        return 1;
    }
    
  • 相关阅读:
    Spring_IOC理论推导
    第一个Mybatis及运行问题分析
    Spring_简介
    ECharts_雷达图
    ECharts_饼图
    ECharts_直角坐标系的常用配置
    ECharts_散点图
    ECharts_折线图
    util之日期工具类
    util之Json工具类
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7211945.html
Copyright © 2020-2023  润新知