zoukankan      html  css  js  c++  java
  • 【CF468C】Hack it!(构造)

    点此看题面

    • 定义(f(x))为一个十进制数(x)所有数码的和。
    • 给定(a),求构造一对(l,r(lle r)),满足(sum_{i=l}^rf(i)equiv0(mod a))
    • (1le ale10^{18})

    构造

    考虑对于任意(x<10^{18}),都有(f(x+10^{18})=f(x)+1)(应该是显然,就相当于在开头添了一个(1))。

    所以说,如果我们能求出(sum_{i=0}^{10^{18}-1}f(i)equiv t(mod a)),那么只要给它左右端点同时加上(a-t),根据之前的结论就能使得左式的值恰好加上(a-t)

    因此,构造出的(sum_{i=a-t}^{10^{18}-1+a-t}f(i)equiv0(mod a))

    而要求(t)是非常简单的,就是考虑每一位共有(9)种选法,总和为(45),而位与位之间的选择独立,因此每一位的每种选法都能出现(10^{17})次。

    综上,我们有:

    [sum_{i=0}^{10^{18}-1}=18 imes 45 imes10^{17}=81 imes10^{18} ]

    所以这道题就做完了。

    代码:(O(1))

    #include<bits/stdc++.h>
    #define Tp template<typename Ty>
    #define Ts template<typename Ty,typename... Ar>
    #define Reg register
    #define RI Reg int
    #define Con const
    #define CI Con int&
    #define I inline
    #define W while
    #define LL long long
    using namespace std;
    int main()
    {
    	LL a;scanf("%lld",&a);LL x=(LL)1e18,y=x*9%a*9%a;return printf("%lld %lld
    ",a-y,x-1+a-y),0;//直接构造
    }
    
    败得义无反顾,弱得一无是处
  • 相关阅读:
    7-25 念数字
    7-24 约分最简分式
    7-23 币值转换
    HDU-1102-Constructing Roads
    HDU-1301-Jungle Roads
    链式向前星
    HDU-1217-Arbitrage(SPFA)
    POJ-1258-Agri-Net
    HDU-1863-畅通工程
    POJ-3050-Hoscotch
  • 原文地址:https://www.cnblogs.com/chenxiaoran666/p/CF468C.html
Copyright © 2011-2022 走看看