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');
}
相关推荐
码行山野赴时序归途11 分钟前
顺序表(Sequential List)详解:从数组到 C 语言实现
c语言·开发语言·数据结构·算法
Lokey86836 分钟前
自注意力机制与多头注意力机制
算法
linx2951 小时前
单元七 · 零基础路线图-第 1–3 周·变量、类型与字符串
c语言·开发语言·数据结构·c++·算法
Benny_Tang1 小时前
P7514 [省选联考 2021 A/B 卷] 卡牌游戏 题解
c++·算法
residual_fan1 小时前
经验模态重构:直向工业时间序列数据的数据扩增方法
人工智能·算法·重构·数据挖掘·数据分析
程序猿编码1 小时前
LLM 技术迁移音频领域:基于 GGML 搭建 Roformer,端侧音乐人声分离实现详解
c++·llm·音视频·transformer·模型推理·ggml
wuminyu1 小时前
Kafka的写入延迟与磁盘IO抖动原理分析
java·linux·c语言·jvm·c++
buhuizhiyuci1 小时前
线程的互斥
linux·运维·服务器·c++
aramae1 小时前
模拟实现strcpy(字符串拷贝)(C语言)
java·c语言·开发语言·算法
Benny_Tang1 小时前
「雅礼集训 2018 Day7」A 题解
数据结构·c++·算法