题解 P4193 【数字】

· · 题解

此题做法:找规律

#include <cstdio>
#include <cstring>
using namespace std;

const int N = 22680;
typedef long long ll;
int T; ll l,r,sum[N + 10];

ll answer(ll x) { return sum[N] * (x / N) + sum[x % N]; }

int main()
{
    for(int i = 1,x;i <= N; ++ i)
        if((x = i * ((i - 1) % 9 + 1)) <= N) sum[x] = 1;
    for(int i = 2;i <= N; ++ i) sum[i] += sum[i - 1];
    for(scanf("%d",&T);T--;) scanf("%lld%lld",&l,&r),
        printf("%lld\n",answer(r) - answer(l - 1ll));
    return 0;
}