跳到主要内容

题解:P9390 金盏花

· 阅读需 1 分钟
lailai
Blogger

原题链接

解题思路

分类讨论:

  1. 如果 ZZ 不是十二位数(Z<1012Z<10^{12}),要使 XX 尽可能小,即 100000Y\overline{100000Y}XZ=1012+YZ\lvert X-Z\rvert=10^{12}+Y-Z

  2. 否则,XXZZ 位数相同,取三种情况的最小值即可:

  • 前六位相同:XZ=YZmod106\lvert X-Z\rvert=\lvert Y-Z\bmod10^6\rvert
  • 前五位相同,第六位大 11XZ=Y+106Zmod106\lvert X-Z\rvert=\lvert Y+10^6-Z \bmod 10^6\rvert
  • 前五位相同,第六位小 11XZ=Y106Zmod106\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;
}