\(Des\)

\(Sol\)

\(upd:\)以下两段是错误做法,但我不想删掉\(.jpg\)

-----------------------以下是错误部分------------------------------

看到问\(\sum_{n-l}^rf(n)\)一定会想到数位\(dp\)叭,于是尝试数位\(dp\),然而并不会做.但是觉得可以先尝试想暴力方法(当然是优秀点的暴力)?

对于一个数\(abcd\),如下变化:\((a+b)(b+c)(c+d)\),\((a+2b+c)(b+2c+d)\),\((a+3b+3c+d)\),注意到其实中间过程中有没有取\(\%\)并没有影响,就这样加起来到最后再取\(\%\)是一样的.看到这里我想到了杨辉三角形.到这里可以得出,对于一个数\(x\),我们可以在\(log_{10}x\)的时间里得出\(f(x)\).然后你就可以去打暴力了.

-----------------------以下是正确部分------------------------------

容易发现,若最后一位的数字变化\(1\),那么其\(f\)值也会变化\(1\).又因为\(f\)值只能取\(0\)到\(1\).所以对于连续的十个数,它们的\(f\)值的和是\(\sum_{i=0}^9i=45.\)于是要算出\(\sum_{i=1}^{l}f(i)\)就要简单多了,先\(as+=45*(l/10)\),然后单独计算一下后面剩下的数就好了(只要暴力计算剩下的数的第一个就好了,其他的都可以推出来).最后的答案就是\(sol(r)-sol(l-1)\).

总结一下,这题似乎不能用数位\(dp\),而且数据范围又那么大,其实可以猜测到一定是有规律的一些数可以捆绑在一起算,这些数捆绑在一起的值又会有一定的规律.(突然想起上个学期做过的一个三角函数的题目,也是连续三个一起算,然后这个值又是是循环起来的).要找出这个规律就一定要去分析这个\(f(n)\)的性质/特殊性.

\(over.\)

\(Code\)

上午脑子很乱,\(Wa\)了\(Inf\)次,中午睡醒后重构一遍,虽然第一遍仍然没有过样例,但是再冷静地查了下错,于是过样例之后一遍\(A\)了.

Code
#include<bits/stdc++.h>
#define il inline
#define Ri register int
#define go(i,a,b) for(Ri i=a;i<=b;++i)
#define yes(i,a,b) for(Ri i=a;i>=b;--i)
#define e(i,u) for(Ri i=b[u];i;i=a[i].nt)
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
#define db double
#define inf 2147483647
using namespace std;
il ll read()
{
ll x=0,y=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
return x*y;
}
int a[20];
il ll calc(ll x)
{
Ri ct=0;
mem(a,0);
while(x){a[++ct]=x%10,x/=10;}
while(ct>1)
{
go(i,1,ct-1)a[i]=(a[i]+a[i+1])%10;
--ct;while(!a[ct] && ct>0)--ct;
}
return a[1];
}
il ll sol(ll x)
{
ll ret=(x+1)/10*45,ct=(x+1)%10;
ll qvq=calc(x-ct+1);
while(ct--)
{
ret+=qvq;
qvq=(qvq+1)%10;
}
return ret;
}
int main()
{
int T=(int)read();
while(T--)
{
ll l=read(),r=read();
//printf("sol(%lld)=%lld sol(%lld)=%lld\n",l-1,sol(l-1),r,sol(r));
printf("%lld\n",sol(r)-sol(l-1));
}
return 0;
}

随机推荐

  1. uda 1.C++ 函数

    函数:Python vs C++ 在 Python 和 C++ 中,函数的作用相同:函数把语句组合在一起,执行某种任务.函数可以帮助你避免重复地复制和粘贴相同的代码. 函数编写的语法有些不同,主要有三 ...

  2. SLS机器学习最佳实战:日志聚类+异常告警

    1.手中的锤子都有啥? 围绕日志,挖掘其中更大价值,一直是我们团队所关注.在原有日志实时查询基础上,今年SLS在DevOps领域完善了如下功能: 上下文查询 实时Tail和智能聚类,以提高问题调查效率 ...

  3. PHP 7.0新增特性详解

    https://www.cnblogs.com/riverdubu/archive/2017/03/22/6434705.html 开始介绍PHP7.0新特性,具体的可以参照官网的介绍,我来挑一些给大 ...

  4. vue 项目编译打包

    1. npm run build 2. npm install -g serve 3.serve dist 原文地址:https://www.cnblogs.com/jy13638593346/p/9 ...

  5. Jquery FormData文件异步上传 快速指南

    网站中文件的异步上传是个比较麻烦的问题,不过现在通过jquery 可以很容易的解决这个问题: 使用jquery2.1版本,较老版本不支持异步文件上传功能: 表单代码: <form id=&quo ...

  6. 用mysql查询某字段是否有索引

    可以使用SHOW INDEX FROM table_name来查看表的索引,从而查看字段的索引:查询结果中table为表名,key_name为索引名,Column_name为列名

  7. hihocoder 1272 买零食

    #1272 : 买零食 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho很喜欢在课间去小卖部买零食.然而不幸的是,这个学期他又有在一教的课,而一教的小卖部姐姐以冷若冰 ...

  8. PHP redis安装扩展

    命令: 查看php版本:PHP -v 查看php安装的扩展:PHP -m php扩展开发包(包括phpize,php -config):yum install php-devel which phpi ...

  9. 同一个页面 andriod和ios设备上的按钮颜色不一致

    andriod系统显示蓝色的按钮,正常:ios设备显示灰色的按钮,不正常. style属性添加-webkit-appearance: none;

  10. 2019-1-27-WPF-使用-ItemsPanel-修改方向

    title author date CreateTime categories WPF 使用 ItemsPanel 修改方向 lindexi 2019-1-27 21:8:9 +0800 2019-0 ...