zoukankan      html  css  js  c++  java
  • Codeforces.468C.Hack it!(构造)

    题目链接

    (dls)出的比赛诶...这么妙。


    (Description)

    (f(x))表示整数(x)在十进制下各个数位的数字之和。给定(a),求两个整数(l,r),使得(sum_{i=l}^rf(i)equiv0 (mathbb{mod} a))
    (1leq aleq10^{18}, 1leq lleq rleq10^{200}),保证存在解。

    (Solution)

    考虑一个简单的性质:(f(x+10^y)=f(x)+1, xlt10^y)
    不妨令(INF=10^{18}),设(sumlimits_{i=0}^{INF-1}f(i)equiv p (mathbb{mod} a))
    由上面的性质可知,(sumlimits_{i=1}^{INF}f(i)=p-f(0)+f(INF)=p+1)
    同理还有:(sumlimits_{i=2}^{INF+1}f(i)=p+2... sumlimits_{i=k}^{INF+k-1}f(i)=p+k)(都是模(a)意义下)。
    然后就可以构造出(a=p+a-p=sumlimits_{i=a-p}^{INF+a-p-1}f(i))。所以令(l=a-p, r=10^{18}+a-p-1)就可以啦。
    有个问题是求(sum_{i=0}^{10^{18}-1}f(i) mathbb{mod} a)。展开一下:$$egin{aligned}sum_{i=0}^{10^{18}-1}f(i)&=(1+2+...+9)10^{17}+10 imessum_{i=0}^{10^{17}-1}f(i)&=45 imes10^{17}+10(45 imes10^{16}+10 imessum_{i=0}^{10^{15}-1}f(i))&=...&=18 imes45 imes10^{17}=81 imes10^{18}end{aligned}$$

    这样就做完啦。

    还有个做法是,考虑有(sumlimits_{i=1+x}^{10^y+x}f(i)-sumlimits_{i=1}^{10^y}f(i)=x, xlt10^y)。枚举(y),如果有(a-sumlimits_{i=0}^{10^y}<10^y),令(x)等于这个数,就有(sumlimits_{i=1+x}^{10^y+x}f(i)=sumlimits_{i=0}^{10^y}+a-sumlimits_{i=0}^{10^y}=a)了。
    需要预处理一下(sum_{i=1}^{10^y}f(i)),因为是上限(10)的幂所以算一下每个数出现次数即可(或者像上面一样直接算)。


    #include <cstdio>
    typedef long long LL;
    const LL INF=1e18;
    
    int main()
    {
    	LL a; scanf("%I64d",&a);
    	LL l=a-INF*9%a*9%a;
    	printf("%I64d %I64d
    ",l,INF+l-1);
    
    	return 0;
    }
    
  • 相关阅读:
    Python函数
    mysql实现体温管理系统
    python操作Mysql
    Python列表,元祖
    word中标题去掉前面的点
    关于浏览器被劫持解决方法
    小程序开发问题
    微信小游戏开发
    yii2修改默认控制器和布局视图
    yii2的url美化设置
  • 原文地址:https://www.cnblogs.com/SovietPower/p/10517540.html
Copyright © 2011-2022 走看看