【题解】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

要加强数学分析训练

posted @ 2026-07-07 20:23  Aistyr  阅读(6)  评论(0)    收藏  举报