题解:P9390 金盏花

· · 题解

题意简述

有一个 12 位整数 X,已知它的后 6 位构成的整数是 Y。再给定一个不超过 12 位整数 Z,求所有可能的 X|X-Z| 的最小值。

解题思路

Z 不是 12 位整数(Z<10^{12}),则必定有 X>Z。要让 X 尽可能小,令 X=\overline{100000Y}|X-Z|=Y-Z+10^{12}

否则 XZ 位数相同,考虑三种情况的最小值即可:

  1. 6 位相同:|X-Z|=|Y-Z\bmod 10^6|
  2. 5 位相同,第 6 位大 1|X-Z|=|Y-Z\bmod 10^6+10^6|
  3. 5 位相同,第 6 位小 1|X-Z|=|Y-Z\bmod 10^6-10^6|

时间复杂度为 O(1)

参考代码

#include <bits/stdc++.h>
using namespace std;

using ll=long long;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    ll y,z;
    cin>>y>>z;
    if(z<100000000000)cout<<y-z+100000000000<<'\n';
    else cout<<min({abs(y-z%1000000),abs(y-z%1000000+1000000),abs(y-z%1000000-1000000)})<<'\n';
    return 0;
}