【题解】CF468C Hack it!
1
我们考虑一个数 \(s\),设初态 \(\sum_{i=0}^{s}dig(i) \equiv p \pmod a\)
那么有 \(\sum_{i=0}^{s+k}dig(i) \equiv p+k \pmod a\)
此时钦定 \(k=a-p\)
得到 \(\sum_{i=0}^{s+a-p}dig(i) \equiv p+a-p \equiv 0 \pmod a\)
2
如何得到满足以上性质的 \(s\)
我们这里称 \([l \times 10^k,(l+1) \times 10^k-1]\) 与 \([(l+1) \times 10^k,(l+2) \times 10^k-1]\) 相仿
发现如果两个区间 \(A,B\) 相仿,那么 \(dig(A_i)+1=dig(B_i)\)
我们只要保证 \(\sum_{l}^{r} dig\) 中的 \(l\) 只在 \(A\) 中运动, \(r\) 只在 \(B\) 中运动,且起始位置和速度相等即可
此时 \(s\) 一组合法的构造为 \(s=10^{18}-1\) ,\([0,s]\) 和 \([s+1,2 \times s+1]\) 相仿
3
如何求解 \(L,R\)
那么 \(L=a-p,R=10^{18}+a-p-1\)
如何求 \(p\)
设 \(\sum_{i=0}^{10^{18}-1}dig(i) \equiv p \pmod a\), \(p\) 的计算可以写一个数位 \(dp\) 求解,得到 \(p=81 \times 10^{18} \pmod a\)
当然也可以数学分析,\(18\) 位每位 \(0 \sim 9\) 均等出现,每一位总和 \(10^{17} \times 45\), \(18\) 位加起来 \(10^{17} \times 45 \times 18=81 \times 10^{18}\)
4:数位dp
#include<bits/stdc++.h>
#define int __int128
using namespace std;
vector<signed> q;
__int128 dp[200][2][2][200];
__int128 dfs(int now,int st,int limit,int sum){
//cout<<now<<" "<<st<<" "<<limit<<" "<<sum<<"\n";
if(now==q.size()) return sum;
if(dp[now][st][limit][sum]!=-1) return dp[now][st][limit][sum];
int up=limit?q[now]:9;
int ans=0;
for(int i=0;i<=up;i++){
ans+=dfs(now+1,st&&(i==0),limit&&(i==up),sum+i);
}
dp[now][st][limit][sum]=ans;
return ans;
}
void print(__int128 x){
vector<signed> q;
while(x){
q.push_back(x%10);
x/=10;
}
reverse(q.begin(),q.end());
for(auto v:q) cout<<v;cout<<"\n";
}
signed main(){
int x=999999999999999999;
while(x){
q.push_back(x%10);
x/=10;
}
reverse(q.begin(),q.end());
memset(dp,-1,sizeof dp);
print(dfs(0,1,1,0));
return 0;
}
//81000000000000000000
//81*10^18
5:std
#include<bits/stdc++.h>
#define int long long
using namespace std;
int ksm(int a,int b,int mod){
int res=1;
while(b){
if(b&1){
res*=a;
res%=mod;
}
a*=a;
a%=mod;
b>>=1;
}
return res;
}
int mpow(int a,int b){
int res=1;
while(b--){
res*=a;
}
return res;
}
signed main(){
int a;cin>>a;
int p=9*ksm(10,18,a)%a*9%a;
cout<<a-p<<" "<<mpow(10,18)+a-p-1<<"\n";
return 0;
}
6:反思
实在反思不出来什么东西,遂去问AI找灵感
............
好吧还是没什么灵感,随便写一条吧
6.1
要加强数学分析训练

浙公网安备 33010602011771号