此处仅讲思路。
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=xM−1aM+xM−2aM−1+⋯+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=xM−1bM+xM−2bM−1+⋯+b1。
2
对于 A − B A-B A−B 最小的情况,对于 ∀ 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 xi−1=max(ai,bi)+1。
笔者用数学归纳法求解。
M = 1 M=1 M=1 , 特殊情况,易证。
M = k M=k M=k , 设 A − B A-B A−B 最小的情况时,设 x k − 1 = d ≠ m a x ( a k , b k ) + 1 x_{k-1} = d \not= max(a_k,b_k)+1 xk−1=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)=xk−2ak−1+⋯+a1 , 易见, A = c ( A ) + x k − 1 a k A=c(A)+x_{k-1}a_k A=c(A)+xk−1ak。
情况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) d−1<max(ak,bk),d∈N⇒d≤max(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 d≤max(ak,bk)⇒ak<d,bk<d⇒max(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) ⇒dak−dbk<max(ak,bk)ak−max(ak,bk)bk⇒d(ak−bk)<max(ak,bk)(ak−bk)
⇒ 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 xk−1=max(ak,bk)+1
代码就不给了。