Skip to main content
Original138 words1 min

题解:P9390 金盏花

Summary

合法的 X 可写为前六位乘以一百万再加上 Y,前六位取值 100000 至 999999,故所有候选数构成有限等差数列。目标是在这段数列中寻找与 Z 距离最小的一项:Z 位于数列内部时比较夹住它的两项;位于范围外时取对应端点。

题意简述​

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

解题思路​

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

参考代码​

244 Bcpp
#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;
}