p8782题解

此处仅讲思路。

1

题意:两个 X X X 进制数,求差最小值。

为了方便描述,我们规定:

  • M A = M B M_A=M_B MA=MB
  • 两个数为 ( A ) X {(A)}_X (A)X ( B ) X {(B)}_X (B)X 两个 X X X 进制数。
  • 两个数可表达为 ( A ) X = x M − 1 a M + x M − 2 a M − 1 + ⋯ + a 1 (A)_X=x_{M-1}a_M+x_{M-2}a_{M-1}+\cdots+a_1 (A)X=xM1aM+xM2aM1++a1 ( B ) X = x M − 1 b M + x M − 2 b M − 1 + ⋯ + b 1 (B)_X=x_{M-1}b_M+x_{M-2}b_{M-1}+\cdots+b_1 (B)X=xM1bM+xM2bM1++b1

2

对于 A − B A-B AB 最小的情况,对于 ∀ i ∈ [ 1 , M ] \forall i\in \left[1,M\right] i[1,M] x i − 1 = max ⁡ ( a i , b i ) + 1 x_{i-1} = \max(a_i,b_i)+1 xi1=max(ai,bi)+1

笔者用数学归纳法求解。

M = 1 M=1 M=1 , 特殊情况,易证。

M = k M=k M=k , 设 A − B A-B AB 最小的情况时,设 x k − 1 = d ≠ m a x ( a k , b k ) + 1 x_{k-1} = d \not= max(a_k,b_k)+1 xk1=d=max(ak,bk)+1

C ( A ) = x k − 2 a k − 1 + ⋯ + a 1 C(A) = x_{k-2}a_{k-1}+\cdots+a_1 C(A)=xk2ak1++a1 , 易见, A = c ( A ) + x k − 1 a k A=c(A)+x_{k-1}a_k A=c(A)+xk1ak

情况1: d < max ⁡ ( a k , b k ) + 1 d < \max(a_k,b_k)+1 d<max(ak,bk)+1

d − 1 < max ⁡ ( a k , b k ) , d ∈ N ⇒ d ≤ max ⁡ ( a k , b k ) d-1<\max(a_k,b_k),d\in N \Rightarrow d \leq \max(a_k,b_k) d1<max(ak,bk),dNdmax(ak,bk)
d ≤ max ⁡ ( a k , b k ) ⇒ a k < d , b k < d ⇒ m a x ( a k , b k ) < d d \leq \max(a_k,b_k) \Rightarrow a_k < d,b_k < d \Rightarrow max(a_k,b_k) < d dmax(ak,bk)ak<d,bk<dmax(ak,bk)<d,假设不成立。

情况2: d > max ⁡ ( a k , b k ) d > \max(a_k,b_k) d>max(ak,bk)

( d a k + C ( A ) ) − ( d b k + C ( B ) ) < ( max ⁡ ( a k , b k ) a k + C ( A ) ) + ( max ⁡ ( a k , b k ) a k + C ( A ) ) (da_k + C(A))-(db_k + C(B)) < (\max(a_k,b_k)a_k +C(A))+(\max(a_k,b_k)a_k+C(A)) (dak+C(A))(dbk+C(B))<(max(ak,bk)ak+C(A))+(max(ak,bk)ak+C(A))
⇒ d a k − d b k < max ⁡ ( a k , b k ) a k − max ⁡ ( a k , b k ) b k ⇒ d ( a k − b k ) < max ⁡ ( a k , b k ) ( a k − b k ) \Rightarrow da_k-db_k < \max(a_k,b_k)a_k - \max(a_k,b_k)b_k\Rightarrow d(a_k-b_k) < \max(a_k,b_k)(a_k-b_k) dakdbk<max(ak,bk)akmax(ak,bk)bkd(akbk)<max(ak,bk)(akbk)
⇒ d < max ⁡ ( a k , b k ) \Rightarrow d < \max(a_k,b_k) d<max(ak,bk) 假设不成立。


综上, x k − 1 = max ⁡ ( a k , b k ) + 1 x_{k-1} = \max(a_k,b_k)+1 xk1=max(ak,bk)+1

代码就不给了。

  • 40
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值