题解:P9390 金盏花
lailai0916 · · 题解
解题思路
分类讨论:
-
如果
Z 不是十二位数(Z<10^{12} ),要使X 尽可能小,即\overline{100000Y} :\lvert X-Z\rvert=10^{12}+Y-Z 。 -
否则,
X 和Z 位数相同,取三种情况的最小值即可:
- 前六位相同:
\lvert X-Z\rvert=\lvert Y-Z\bmod10^6\rvert 。 - 前五位相同,第六位大
1 :\lvert X-Z\rvert=\lvert Y+10^6-Z \bmod 10^6\rvert 。 - 前五位相同,第六位小
1 :\lvert X-Z\rvert=\lvert Y-10^6-Z \bmod 10^6\rvert 。
参考代码
#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<<100000000000+y-z<<'\n';
}
else
{
cout<<min(abs(y-z%1000000),min(abs(y+1000000-z%1000000),abs(y-1000000-z%1000000)))<<'\n';
}
return 0;
}