zoukankan      html  css  js  c++  java
  • ZOJ 3436 July Number(DFS)

    题意   把一个数替换为这个数相邻数字差组成的数  知道这个数仅仅剩一位数  若最后的一位数是7  则称原来的数为 July Number  给你一个区间  求这个区间中July Number的个数

    从7開始DFS  位数多的数总能由位数小的数推出

    #include <bits/stdc++.h>
    using namespace std;
    const int N = 1e6;
    int july[N], n;
    set<int> ans;
    
    int pw[] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000};
    //剩余长度, 当前位要填的数,通过什么数来搜索, 路径
    void dfs(int len, int d, int bas, int cur)
    {
        if(d < 0 || d > 9) return;  //要填的数不合法
        if(!len)
        {
            july[n++] = cur * 10 + d;
            return;
        }
        int k = pw[len - 1];
        dfs(len - 1, d - bas / k, bas % k, cur * 10 + d);
        dfs(len - 1, d + bas / k, bas % k, cur * 10 + d);
    }
    
    int main()
    {
        ans.insert(7);
        set<int>::iterator it;
        for(int l = 2; l < 10; ++l)
        {
            n = 0;
            for(it = ans.begin(); it != ans.end(); ++it)
                for(int i = 1; i < 10; ++i)
                    dfs(l - 1, i, *it, 0);
            for(int i = 0; i < n; ++i) ans.insert(july[i]);
            //printf("%d
    ", ans.size());
        }
    
        int a, b = n = 0;
        for(it = ans.begin(); it != ans.end(); ++it) 
            july[n++] = *it;
        while(~scanf("%d%d", &a, &b))
            printf("%d
    ", upper_bound(july, july + n, b) - lower_bound(july, july + n, a));
    
        return 0;
    }

    July Number

    Time Limit: 2 Seconds      Memory Limit: 65536 KB

    The digital difference of a positive number is constituted by the difference between each two neighboring digits (with the leading zeros omitted). For example the digital difference of 1135 is 022 = 22. The repeated digital difference, or differential root, can be obtained by caculating the digital difference until a single-digit number is reached. A number whose differential root is 7 is also called July Number. Your job is to tell how many July Numbers are there lying in the given interval [ab].

    Input

    There are multiple cases. Each case contains two integers a and b. 1 ≤ a ≤ b ≤ 109.

    Output

    One integer k, the number of July Numbers.

    Sample Input

    1 10

    Sample Output

    1


    Author: HE, Ningxu
    Contest: ZOJ Monthly, November 2010

  • 相关阅读:
    MongoDB —— 第三篇 高级操作
    MongoDB —— 第七篇 运维技术
    MongoDB —— 第八篇 驱动实践
    EditPlus 使用技巧集萃(转)
    面试经验网上资源汇总
    设计模式网上资料整合理解——创建型模式(一)
    C#编写扩展存储过程
    利用VS调试脚本
    用DevExpress.XtraReports实现复杂报表套打的一些经验
    无废话.NET帮助文件生成——Sandcastle+SHFB
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6729691.html
Copyright © 2011-2022 走看看