幸运数字(BFS)

幸运数字Ⅱ

https://ac.nowcoder.com/acm/contest/23156/1011

这是一道关于广搜加上区间指针遍历的题,做的时候卡了很久

using namespace std;
typedef long long ll;
const ll inf = 1e9;
queue<ll> a,b;
ll l,r;
vector<ll> x,y;
int main(){
	cin >> l >> r;
	a.push(4);
	a.push(7);
	b.push(4);
	b.push(7);
	while(a.front() <= inf)
    //首先是这里的范围问题,1e9数量级的数还是得写出来,因为虽然题目所给范围是1e9,但是一些小于1e9的数字的值取的值还是超过1e9的第一个数。
    {
		b.push(a.front() * 10 + 4);
		b.push(a.front() * 10 + 7);
		a.push(a.front() * 10 + 4);
		a.push(a.front() * 10 + 7);
		a.pop();
	}
	ll j = l;
	ll sum = 0;
	while(j <= r){//下面的代码最好能考虑b空的情况
		while(!b.empty() && j > b.front()){
			b.pop();
		}//将b.front()大小调整到j本身或者之后
        if (b.empty()) 
            break;
        if (j == r) {
            sum+= b.front();
            break;
        }//如果j恰好为b.front(),则最后总和再加上b.front()即可
		sum += (min(r,b.front()) - j + 1) * b.front();
		j = b.front() + 1;//将j跳转到当前端点值之后
		b.pop();
	}
	cout << sum << endl;
    return 0;
}

链接

全部评论

相关推荐

11-04 14:10
东南大学 Java
_可乐多加冰_:去市公司包卖卡的
点赞 评论 收藏
分享
10-07 20:48
门头沟学院 Java
听说改名就会有offer:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务