首页 > 其他 > 详细

JZ初中OJ 1566. [GDKOI]幸运锁

时间:2019-08-07 19:52:21      阅读:67      评论:0      收藏:0      [点我收藏+]

题目描述

有一把幸运锁,打开它将会给你带来好运,但开锁时需要输入一个正整数(没有前导0)。幸运锁有一种运算,对于一个正整数,返回他的相邻两位数字间的差,如1135,运算结果为22(会去掉前导0)。

现在已知只有经过反复运算最终结果为7的数才能打开这把锁,给你一个区间[a,b],问该区间中有多少个能打开幸运锁的幸运数。
 

输入

   第一行两个整数a,b。

输出

   一个整数K,表示共有多少个这样的数。
 

样例输入

1 10

样例输出

1
 

数据范围限制

【限制】

1<=a<=b<=10^9。

30%的数据有b<=10^6。
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int readint() {
 4     int x = 0;
 5     char c = getchar();
 6     for (; c <  0 || c >  9; c = getchar());
 7     for (; c >= 0 && c <= 9; c = getchar()) x = (x * 10) + (c - 0);
 8     return x;
 9 }
10 long long toVal(string s) {
11     long long sum = 0;
12     for (int i = 0; s[i]; ++i)
13         sum = (sum * 10) + (s[i] - 0);
14     return sum;
15 }
16 const int MAXN = 170000 + 5;
17 int x, y, hd, tl, len, ans;
18 string s, d[MAXN];
19 void dfs(int pos)
20 {
21     long long tmp = 0;
22     if (pos == len)
23     {
24         tmp = toVal(s);
25         int addnum = 0;
26         for (; tmp <= y;)
27         {
28             d[++tl] = s;
29             if (tmp >= x && tmp <= y) ++ans;
30             
31             s = s[0] + s;
32             ++addnum;
33             tmp = toVal(s);
34         }
35         s.erase(0, addnum);
36         return;
37     }
38     tmp = (s[pos] - 0) + (d[hd][pos] - 0);
39     if (tmp <= 9)
40     {
41         s += (char)(tmp + 0);
42         dfs(pos + 1);
43         s.erase(pos + 1, 1);
44     }
45     tmp = s[pos] - d[hd][pos];
46     if (tmp >= 0 && d[hd][pos] != 0)
47     {
48         s += (char)(tmp + 0);
49         dfs(pos + 1);
50         s.erase(pos + 1, 1);
51     }
52 }
53 int main()
54 {
55     freopen("lucky.in", "r", stdin);
56     freopen("lucky.out", "w", stdout);
57     x = readint();
58     y = readint();
59     d[tl = 1] = "7";
60     if (x <= 7 && y >= 7) ++ans;
61     for (; hd < tl;)
62     {
63         len = d[++hd].size();
64         for (char c = 1; c <= 9; ++c) {
65             s = c;
66             dfs(0);
67         }
68       }
69     printf("%d\n", ans);
70     fclose(stdin);
71     fclose(stdout);
72     return 0;
73 }

JZ初中OJ 1566. [GDKOI]幸运锁

原文:https://www.cnblogs.com/anbujingying/p/11317211.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!