构造题果然都非常神仙啊

首先翻译有点问题,\(L, R\)的范围应该为\([1, 10^{200}]\)

由于模数a达到了\(10^{18}\),所以我们可以发现,当\(i<10^{18}\)时,\(f()\)有一个性质:

\[f(i+10^{18}) = f(i)+1
\]

我们令\(g=\sum_{i=1}^{10^{18}}f(i)\ (mod\ a)\)

于是我们有:\(g+1=\sum_{i=2}^{10^{18}+1}f(i)\ (mod\ a)\)

\(g+a-g=\sum_{i=a-g+1}^{10^{18}+a-g}f(i)\ (mod\ a)=0\ (mod\ a)\)

所以我们可以构造出一组解为\([a-g, 10^{18}+a-g+1]\)

于是我们现在问题就变成了求出\(g\)

\(g=\sum_{i=1}^{10^{18}-1}f(i)+1\)

对于\(10^{18}-1\)的所有数位出现次数都是一样长的

所以答案应该为\(45*\)每一个数位出现多少次

这个东西就可以用数位DP组合数来求了:我们把原问题想象成:有18个空位,你可以放\([0, 9]\)中的所有数,问\(i\)放了多少次

\[ans=\sum_{i=1}^{18}C_{18}^i*9^{18-i}
\]

然后用\(__int128\)跑一下,答案为\(45*18*10^{17}+1=81*10^{18}+1\)

\(Code:\)

#include<bits/stdc++.h>
using namespace std;
long long a, pax = 1e18 + 1;
signed main() {
cin >> a;
long long l = a - pax % a * 9 % a * 9 % a, r = pax + l - 1;
printf("%lld %lld", l, r);
return 0;
}

最新文章

  1. Ref 与 Out 的使用方法及区别
  2. web前端编写注意点
  3. BabeLua
  4. Disable Portrait in app
  5. GDB技巧整理
  6. javascript代码放置位置对程序的影响
  7. BestCoder Round #20 部分题解(A,B,C)(hdu5123,5124,5125)
  8. [Unity-7] Update和FixedUpdate
  9. Android中的ScrollTo和ScrollBy解析
  10. Loadrunner web_url函数学习(转贴)
  11. ASP.NET MVC中错误处理方式
  12. Django访问量和页面点击数统计
  13. ES 15 - Elasticsearch中的数据类型 (text、keyword、date、geo等)
  14. MFC 解决中文乱码问题
  15. &lt;iOS开发&gt;之App上架流程(2017)
  16. Spring4之IOC
  17. python 参数解析ArgumentParser
  18. FastDFS配置 ***
  19. 04 Spring的@Autowired注解、@Resource注解、@Service注解
  20. [转]wget 下载整个网站,或者特定目录

热门文章

  1. 从实践到原理,带你参透 gRPC
  2. EF CodeFirst Dome学习
  3. Java知识回顾 (14)网络编程
  4. Vue编程式跳转
  5. Oracle 用户与模式的关系
  6. Js 打印 div
  7. Requests库详细的用法
  8. 使用 shell 脚本配置 iOS 工程
  9. 理解 Node.js 中 Stream(流)
  10. docker动态修改端口映射(考虑生产环境)