题解 P7199 【[COCI2019-2020#1] Trol】

这里你通常可以看到一个传送门

看见一道红题,第一直觉——打表

打表

可以看出,每一个数被替换到最后是191-9的循环,而要求第ll项到第rr项的和,我们可以利用前缀和推出是sumrsuml1sum_r-sum_{l-1}sumisum_i为前ii项替换后的数字的和)。

此时,代码已经浮出水面:

#include<bits/stdc++.h> 
using namespace std;
long long sum(long long x)//求前x项的和
{
    return x/9*45+(x%9)*(x%9+1)/2;
}
int main()
{
    int q;
    cin>>q;
    long long l,r;//本题数据达到2^60,要用long long
    for(int i=1;i<=q;i++)
    {
        cin>>l>>r;
        cout<<sum(r)-sum(l-1)<<endl;//求第l项到第r项的和
    }
    return 0;
}
posted @ 2021-02-02 16:04  luckydrawbox  阅读(9)  评论(0)    收藏  举报  来源