金盏花
题目描述
有一个十二位十进制数 X X X,你只知道它的后六位构成的数是 Y Y Y。
另外再给出一个整数 Z Z Z,你需要求出所有可能的 X X X 中, X X X 与 Z Z Z 的差,即 ∣ X − Z ∣ \lvert X - Z \rvert ∣X−Z∣ 的最小值。
注意, X , Y , Z X,Y,Z X,Y,Z 都没有前导零(即最高位不是 0 0 0), X , Y X,Y X,Y 分别要有恰好十二位和六位。
输入格式
第一行:两个整数 Y , Z Y,Z Y,Z。
输出格式
第一行:一个整数表示 ∣ X − Z ∣ \lvert X - Z \rvert ∣X−Z∣ 的最小值。
样例 #1
样例输入 #1
987654 123456123456
样例输出 #1
135802
样例 #2
样例输入 #2
428571 714285
样例输出 #2
99999714286
提示
【样例 #1 解释】
令 X = 123455987654 X=123455987654 X=123455987654,可以取到 ∣ X − Z ∣ \lvert X - Z \rvert ∣X−Z∣ 的最小值 135802 135802 135802。
【样例 #2 解释】
令 X = 100000428571 X=100000428571 X=100000428571,可以取到 ∣ X − Z ∣ \lvert X - Z \rvert ∣X−Z∣ 的最小值 99999714286 99999714286 99999714286。
【数据范围】
对于全部数据: 100000 ≤ Y ≤ 999999 100000\leq Y\leq 999999 100000≤Y≤999999, 0 ≤ Z ≤ 1 0 12 0\leq Z\leq 10^{12} 0≤Z≤1012。
子任务编号 | Z ≤ Z\leq Z≤ | 特殊限制 | 分值 |
---|---|---|---|
Subtask 1 \text{Subtask 1} Subtask 1 | 0 0 0 | Y = 142857 Y=142857 Y=142857 | 25 25 25 |
Subtask 2 \text{Subtask 2} Subtask 2 | 0 0 0 | 无 | 25 25 25 |
Subtask 3 \text{Subtask 3} Subtask 3 | 999999 999999 999999 | 无 | 25 25 25 |
Subtask 4 \text{Subtask 4} Subtask 4 | 1 0 12 10^{12} 1012 | 无 | 25 25 25 |
C++实现
#include
using namespace std;
int main()
{
cin>>y>>z;
if(z<100000000000)
{
cout<<100000000000+y-z<<endl;
}
else
{
cout<<min(abs(y-z%1000000),min(abs(y+1000000-z%1000000),abs(y-1000000-z%1000000)))<<endl;
}
return 0;
}
后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容