普通DP——CF1538FInteresting Function

CF1538F——Interesting Function

题目传送门:Interesting Function

啊明天就要回家了,有点思考不进去啊。开始这个题目是数位\(dp\), 因为数字在变大的时候改变的位数感觉是一样的,比如99变100和199变200是一样的。但是数位\(dp\)一般是枚举满足题目条件的数字的个数,这里并没有要求枚举什么数字个数,对数字更没有什么限制,所以应该不用数位\(dp\)

主要是需要发现数字一个特点,从一个数到另外一个数要变1位就够了,除了进位的时候,从9到10多变了1位,从199到200多变了三位就这样就好了,算进十位,百位,千位.....的次数就行了。

#include<iostream>
#include<string>
using namespace std;

int solve(int num)
{
	int ans = num;
	int j = 9;
	int now = 1e9;
	for(; now >= 10;)
	{
		ans += (num/now - num/(now*10))*j;
		now /= 10;
		j--;
	}
	return ans;
}
int main()
{
	int t;
	int l, r;
	scanf("%d", &t);
	while(t--)
	{
		scanf("%d %d", &l, &r);
		printf("%d\n", solve(r)-solve(l));
	}
	
	return 0;
}
posted @ 2021-07-14 16:48  斌斌翻水水  阅读(102)  评论(0)    收藏  举报