CF468C Hack it! 超详细解答

CF468C Hack it! 超详细解答

构造+数学推导

原文极简体验

CF468C Hack it!

题目简化:

令\(f(x)\)表示\(x\)在十进制下各位数字之和

给定一整数\(a\)构造\(l,r\)

使得\(\sum_{i=l}^r f_i≡ 0 (mod \space a)\)

\(1≤a≤10^{18}\)

\(1≤l,r≤10^{200}\)

致简约:

可以发现\(f_{1e18+x}-f_{x}=1\)

所以有前缀和函数\(S_{1e18+x}=S_{1e18}+S_{x}+x\)

所以\(S_{1e18+x}-S_{x}=S_{1e18}+x\)

等式左边可以看作\(\sum_{i=l}^rf_i\)

所以\(S_{1e18}+x≡0\)

所以\(x=-S_{1e18}(mod \space a)\)

\(S_{1e18}=81 \times 1e18+1\)

\(code:\)

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll maxx=1e18,a,k=1e18;
int main()
{
    cin>>a;
    k=(((((k%a)*9)%a)*9)%a+1)%a;
    k=(-k%a+a)%a;
    cout<<1+k<<" "<<maxx+k<<endl;
}
上一篇:Java入门part8--String类01


下一篇:域套接字-多客户端实现