zoukankan      html  css  js  c++  java
  • CF468C 【Hack it!】

    构造题果然都非常神仙啊

    首先翻译有点问题,(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;
    }
    
  • 相关阅读:
    Golang string slice
    Golang 切片
    Golang 数组
    Golang随机数
    如何才能轻松地分析日志?
    Linux 环境下 gzip 的加解密命令
    谁掳走了 nginx.pid 文件?
    这个 'ip' 竟然把我搞蒙圈了……
    Mysql 连接路径 url 参数解析
    C# 接口生成工具Swagger用法
  • 原文地址:https://www.cnblogs.com/bcoier/p/11774604.html
Copyright © 2011-2022 走看看