zoukankan      html  css  js  c++  java
  • CF468C Hack it!(构造,数学)

    洛谷传送门


    解题思路

    方法一:

    发现l和r特别大,但是a特别小。
    于是令 (l=0,r=10^{100}-1),算出一个sum。
    然后发现若l和r同时加上一个数x,最后的sum也加上了x。
    所以只要我们算出原来的sum与a的差,然后l和r同时加上这个差就完成了。

    sum怎么算?
    0~9每个数字出现的频率是相同的,一共 (10^{100} imes 100) 个数字,所以平均每个数字的出现次数为 (10^{101})
    所以最后的sum就是 (0 imes10^{101}+1 imes10^{101}+cdots+9 imes10^{101}=45 imes10^{101})


    方法二:

    r的范围可以进一步缩小,不必从10100-1开始,可以直接从1018-1算起。
    也不用快速幂等,可以写个数位dp求,也可以直接手推。
    sum为 (81 imes10^{18})

    AC代码

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<iomanip>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const long long maxx=1e18;
    long long a,res;
    int main(){
    	ios::sync_with_stdio(false);
    	cin>>a;
    	res=a-9*maxx%a*9%a;
    	cout<<res<<" "<<maxx+res-1<<endl;
        return 0;
    }
    
  • 相关阅读:
    053532
    053531
    053530
    053529
    053528
    RTSP和RTMP的区别是什么?
    RTSP、RTMP和HTTP协议的区别
    在C#中实现视频播放器
    wpf下基于opencv实现视频播放器
    C#实现视频播放器(Vlc.DotNet)
  • 原文地址:https://www.cnblogs.com/yinyuqin/p/15322836.html
Copyright © 2011-2022 走看看