CodeForces 121A

来源:互联网 发布:修改ssh 默认端口 编辑:程序博客网 时间:2024/06/06 13:10

题目大意:输入一个范围,在范围内取几个区间,区间内的所有数当区间分界来计算,所有区间分界都是由4或7组成的。例:2~7  分界为 4, 7。则2~4当作4计算,5~7当作7计算,结果为33。

解题思路:打表将所有区间分界按大小顺序存入数组,然后在范围内判断,先搜素第一个区间分界的位置,则从开头到第一个区间分界都为区间分界的值。如果一次一次加会超时。所有在这一个的区间分界不够大时,计算并将区间分界位置移动。

ac代码:

#include <iostream>#include <queue>#include <cstring>using namespace std;queue <int>qu;long long num[10005], temp, sum;int cnt, n, m, pos;void bfs(){while (!qu.empty())qu.pop();qu.push(4);qu.push(7);cnt = 2;num[0] = 4, num[1] = 7;while (!qu.empty()){temp = qu.front();if (temp > 444444444)return ;qu.pop();qu.push(temp*10 + 4);qu.push(temp*10 + 7);num[cnt++] = temp*10 + 4;num[cnt++] = temp*10 + 7;}}int main(){bfs();while (scanf("%d%d", &n, &m)!=EOF){sum = 0;for (int i=0; ; i++)if (num[i] >= n){pos = i;break;}cnt = 0;for (int i=n; i<=m; i++)if (i <= num[pos])cnt++;else {sum += cnt * num[pos];pos++;cnt = 1;}sum += cnt * num[pos];cout << sum << endl;}return 0;}