普通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;
}

浙公网安备 33010602011771号