题解:P9390 金盏花

· · 题解

题意简述

给定六位整数 Y 和整数 Z,求所有后六位为 Y 的十二位整数 X 中,|X-Z| 的最小值。

解题思路

令 M=10^6。所有合法 X 可写成 X=kM+Y,其中 100000\le k\le999999。因此,候选数构成公差为 M 的有限等差数列。若 Z 位于数列内部,最近项是夹住它的两项之一;若 Z 位于范围外,最近项是对应端点。比较候选项与 Z 的距离即可。

参考代码

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

using ll=long long;
const ll M=1000000;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    ll y,z;
    cin>>y>>z;
    cout<<abs(clamp((z-y+M/2)/M,100000ll,999999ll)*M+y-z)<<'\n';
    return 0;
}