题解 P7199 【[COCI2019-2020#1] Trol】
这里你通常可以看到一个传送门
看见一道红题,第一直觉——打表
可以看出,每一个数被替换到最后是的循环,而要求第项到第项的和,我们可以利用前缀和推出是(为前项替换后的数字的和)。
此时,代码已经浮出水面:
#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;
}