
乱搞qwq
我们其实可以找规律,对于每个数$x$,我们先求出从$1$~$x$中有多少符合条件的,记为$sum[x]$,那么类似于前缀和,答案自然就是$sum[r]-sum[l-1]$了
那么怎么求出$sum[x]$呢,我们思考两情况:
$1、$位数为$1$,也就是$x<=9$,这种情况的话,不用说了。。就是$x$。
$2、$位数大于$1$,这种情况的话,我们会发现,如果想要个位与最高位相同,那么每十个数才会有且只有一个数符合要求,为什么呢?举个例子:当现在最高位是百位且为$2$时,那么个位也必须是$2$,所以符合要求的就是$202,212,222,232......$看出来了吗,这也就是为什么十个数中必定且只有一个数符合要求
但是,这还没完!
我们还要考虑一种情况:
假设$x$是$332$的时候,我们会发现我们把$333$算了进去,所以当最高位大于最低位时,要减去$1$
那么思路讲完了,代码如下:
#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
ll l,r;
ll Get(ll x)
{
if(x<=9)
return x;
ll ge=x%10,ans=x/10+9,now=x;
while(now>=10)
now/=10;
if(now>ge)
--ans;
return ans;
}
int main()
{
scanf("%lld%lld",&l,&r);
printf("%lld",Get(r)-Get(l-1));
return 0;
}