ABC460_E题题解

题目链接。

题意:给定 N N N 和 M M M,找到 x , y ∈ 1 , N x,y\in1,N x,y∈1,N 满足 concat ⁡ ( x , y ) ≡ x + y ( m o d M ) \operatorname{concat} (x,y)\equiv x+y \pmod{M} concat(x,y)≡x+y(modM) 的对数。

首先 concat ⁡ ( x , y ) = x × 10 sum ⁡ ( y ) + y \operatorname{concat}(x,y)=x\times10^{\operatorname{sum}(y)}+y concat(x,y)=x×10sum(y)+y, sum ⁡ ( y ) \operatorname{sum}(y) sum(y) 表示 y y y 十进制下的位数。所以可以推式子。

x × 10 sum ⁡ ( y ) + y ≡ x + y ( m o d M ) ⟹ ( 10 sum ⁡ ( y ) − 1 ) x ≡ 0 ( m o d M ) x\times10^{\operatorname{sum}(y)}+y\equiv x+y \pmod{M}\Longrightarrow (10^{\operatorname{sum}(y)}-1)x\equiv 0 \pmod{M} x×10sum(y)+y≡x+y(modM)⟹(10sum(y)−1)x≡0(modM)

我们枚举 a = 10 sum ⁡ ( y ) − 1 a=10^{\operatorname{sum}(y)}-1 a=10sum(y)−1,计算的就是同余方程 a x ≡ 0 ( m o d M ) ax\equiv 0 \pmod{M} ax≡0(modM) 中 x x x 的解的个数,再乘上满足 sum ⁡ ( y ) \operatorname{sum}(y) sum(y) 等于我们枚举的定值的 y y y 的个数,加到答案里。

因为 a x ≡ 0 ( m o d M ) ⟹ a x + M y ′ = 0 ax\equiv 0 \pmod{M}\Longrightarrow ax+My'=0 ax≡0(modM)⟹ax+My′=0,记 d = gcd ⁡ ( a , M ) d=\gcd(a,M) d=gcd(a,M),这个二元一次方程很特殊, x x x 的通解为 x = k M d ( k ∈ Z ) x=k\dfrac{M}{d}(k\in \mathbb{Z} ) x=kdM(k∈Z),所以解要满足下面的条件。

1 ≤ k M d ≤ N ⟹ 1 × d M ≤ k ≤ N × d M ⟹ 1 ≤ k ≤ N × d M 1\le k\dfrac{M}{d}\le N\Longrightarrow 1\times\dfrac{d}{M}\le k\le N\times\dfrac{d}{M} \Longrightarrow 1\le k\le N\times\dfrac{d}{M} 1≤kdM≤N⟹1×Md≤k≤N×Md⟹1≤k≤N×Md

而 y y y 的个数就是满足位数为 sum ⁡ ( y ) \operatorname{sum}(y) sum(y) 的数的个数(即一位数的个数,两位数的个数......)可以很简单地求出。

核心代码:

cpp 复制代码
void solve(){
	__int128 n,m;
	read(n);read(m);
	int t=sum(n);
	__int128 k=1;
	__int128 ans=0;
	for(int i=1;i<=t;i++){
		k*=(__int128)10;
		__int128 d=gcd(k-1,m);
		__int128 l=1;
		__int128 r=d*n/m;
		ans+=(r-l+1)*(min(n,k-1)-k/10+1)%998244353;
		ans%=998244353;
	}
	prin(ans);
	putchar('\n');
}
相关推荐
Tairitsu_H24 分钟前
[动态规划#1] 子数组 | 最大子数组和 | 环形子数组的最大和 | 乘积最大子数组 | 乘积为正数的最长子数组
算法·动态规划
凯瑟琳.奥古斯特1 小时前
动态调优IoU提升OCR文本合并精度
开发语言·python·算法
布莱克6051 小时前
A* 算法详解:从原理到实现
开发语言·c++·算法
多弗朗皮卡丘1 小时前
C++ 智能指针
开发语言·c++·c++11·智能指针
段一凡-华北理工大学1 小时前
高炉炼铁机器视觉与智能识别十八讲~系列文章15:可靠性篇:防误报、容错与识别系统的鲁棒性设计
人工智能·算法·机器学习·高炉大模型·高炉机器视觉·高炉炼铁模型开发
进化中的刀盾兽2 小时前
从零实现 C++ AI 大模型接入 SDK(十):SessionManager 会话管理与多轮对话实现
c++
小成202303202652 小时前
C++~02运算符重载
开发语言·c++
某林2122 小时前
局部路径规划器 DWB:速度采样与评分权重的取值分析
人工智能·算法·架构·机器人·技术复盘
AI职业加油站2 小时前
模数共振行动解读|大模型应用工程师证书,匹配行业 RAG/Agent 落地人才需求
人工智能·学习·算法·职场和发展·职场发展
郑同学的笔记2 小时前
【c++随笔30】C++ 注册回调函数
开发语言·c++