Educational Codeforces Round 50 (Rated for Div. 2) C. Classy Numbers(dfs+二分)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sugarbliss/article/details/82531165
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll> vec;
void dfs(ll cur, int cnt, int len)
{
	vec.push_back(cur);
	if(len == 18) return;
	dfs(cur*10, cnt, len+1);
	if(cnt < 3)
    {
		for(int i = 1; i <= 9; i++)
			dfs(cur*10+i, cnt+1, len+1);
	}
}

int main()
{
	for(int i = 1; i <= 9; i++)
		dfs(i, 1, 1);
	vec.push_back(1e18);
	sort(vec.begin(), vec.end());
	int T;
	scanf("%d", &T);
	while(T--)
    {
		ll L, R;
		scanf("%lld%lld", &L, &R);
		int l = lower_bound(vec.begin(), vec.end(), L) - vec.begin();
		int r = upper_bound(vec.begin(), vec.end(), R) - vec.begin();
		cout << r - l << endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/sugarbliss/article/details/82531165