码迷,mamicode.com
首页 > 其他好文 > 详细

$ [Contest \#4]$求和 思博题

时间:2019-10-04 20:34:14      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:contest   long   alt   class   def   while   数位   mes   efi   

正解:

解题报告:

传送门$QwQ$

一道看起来是数位$dp$其实并不是的题$QwQ$

首先求$\sum_{l}^r$就变成$\sum_1^r-\sum_1^{l-1}$不说$QwQ$.现在就只要求$\sum_{i=1}^n f(n)$了$QwQ$

考虑固定前缀,只改变个位数,因为个位数的贡献为1,所以$f$的贡献也会各不相同,又因为$f\in[0,9]$,所以$[1,9],[10,19],[20,21],...$的贡献就都是45.

(开始呆呆$lq$还懵了一下,,,想着为啥不是$[1,10],[11,20],...$这样儿的.然后就想起了固定前缀$kk$

于是现在$\sum_{i=1}^n f(n)$就变形为了,$45\cdot \frac{n+1}{10}+\sum_{i=\frac{n+1}{10}\cdot 10}^n f(n)$

现在只要考虑求$\sum_{i=\frac{n+1}{10}\cdot 10}^n f(n)$.

依然是前面说的,固定前缀后只有个位数改变时.因为个位数贡献为1,所以相差在不膜10的意义下也一定是1.

所以求一个其他递推出来就成$QwQ$

$over$

这题主要就是要发现关于这个$f$的几个奇奇怪怪的性质$QwQ$.

嗷记得开$ll$鸭

 

技术图片
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define gc getchar()
#define int long long
#define ri register int
#define rb register bool
#define rc register char
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i)

int d[20];

il int read()
{
    rc ch=gc;ri x=0;rb y=1;
    while(ch!=- && (ch>9 || ch<0))ch=gc;
    if(ch==-)ch=gc,y=0;
    while(ch>=0 && ch<=9)x=(x<<1)+(x<<3)+(ch^0),ch=gc;
    return y?x:-x;
}
il int f(ri x)
{
    ri cnt=0;memset(d,0,sizeof(d));
    while(x){d[++cnt]=x%10,x/=10;}
    while(cnt>1){rp(i,1,cnt-1)d[i]=(d[i]+d[i+1])%10;--cnt;while(!d[cnt] && cnt>0)--cnt;}
    return d[1];
}
il int cal(ri x){ri d1=(x+1)/10,d2=d1*10,ret=f(d2),as=d1*45;while(d2<=x)as+=ret,(++ret)%=10,++d2;return as;}

signed main()
{
    //freopen("1076.in","r",stdin);freopen("1076.out","w",stdout);
    ri T=read();
    while(T--){ri l=read(),r=read();printf("%lld\n",cal(r)-cal(l-1));}
    return 0;
}
View Code

 

$ [Contest \#4]$求和 思博题

标签:contest   long   alt   class   def   while   数位   mes   efi   

原文地址:https://www.cnblogs.com/lqsukida/p/11622631.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!