ZOJ 3436 July Number(DFS)

古城微笑少年丶 2022-03-30 11:40 217阅读 0赞

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

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

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N = 1e6;
  4. int july[N], n;
  5. set<int> ans;
  6. int pw[] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000};
  7. //剩余长度, 当前位要填的数,通过什么数来搜索, 路径
  8. void dfs(int len, int d, int bas, int cur)
  9. {
  10. if(d < 0 || d > 9) return; //要填的数不合法
  11. if(!len)
  12. {
  13. july[n++] = cur * 10 + d;
  14. return;
  15. }
  16. int k = pw[len - 1];
  17. dfs(len - 1, d - bas / k, bas % k, cur * 10 + d);
  18. dfs(len - 1, d + bas / k, bas % k, cur * 10 + d);
  19. }
  20. int main()
  21. {
  22. ans.insert(7);
  23. set<int>::iterator it;
  24. for(int l = 2; l < 10; ++l)
  25. {
  26. n = 0;
  27. for(it = ans.begin(); it != ans.end(); ++it)
  28. for(int i = 1; i < 10; ++i)
  29. dfs(l - 1, i, *it, 0);
  30. for(int i = 0; i < n; ++i) ans.insert(july[i]);
  31. //printf("%d\n", ans.size());
  32. }
  33. int a, b = n = 0;
  34. for(it = ans.begin(); it != ans.end(); ++it)
  35. july[n++] = *it;
  36. while(~scanf("%d%d", &a, &b))
  37. printf("%d\n", upper_bound(july, july + n, b) - lower_bound(july, july + n, a));
  38. return 0;
  39. }

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 [a, b].

Input

There are multiple cases. Each case contains two integers a and b. 1 ≤ ab ≤ 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

发表评论

表情:
评论列表 (有 0 条评论,217人围观)

还没有评论,来说两句吧...

相关阅读

    相关 31 July

    [P1005][] 矩阵取数游戏 高精度不能更坑…… include <cstdio> include <cstring> struct INT { long lo

    相关 July:海量数据处理

    海量数据处理:十道面试题与十个海量数据处理方法总结 作者:July、youwang、yanxionglu。 时间:二零一一年三月二十六日 本文之总结:[教你如

    相关 English in July(2017)

        这个月,英语进入了正常的轨道,学习英语的热情又上来了。     你们这是去干吗呢?我们去参加词汇暴增啊!什么?等等我,我也要去。就这样,我也加入了词汇暴增小组

    相关 ZOJ 3941

    题意:有n(10)段时间,会举行party,每个party有开始时间,结束时间,不同party举行时间可能重复。(时间范围为1~1e9) 我们一共最多可以参加m(1e9)