A21233. 最佳操作数
填空题
较难
知识点
题目描述
最佳操作数
题目描述
给定一个数字 x,再给定一个等差数列。请寻找这个等差数列距离 x 最近的数字,并输出这个最小距离。
等差数列的第一项叫做首项,用数字 a 表示,接下来每一项都比前一项多 d,d 称之为公差,数列的项数记为 n。
输入
输入四个整数分别表示 x、a、d、n。
输出
输出一个整数表示最少的操作次数。
输入样例1
3 1 3 3输出样例1
1输入样例2
-1000000000000000000 1 3 3输出样例2
1000000000000000001数据范围
-10^18≤x、a≤10^18,-10^6≤d≤10^6,1≤n≤10^12。
参考答案
#include<iostream>
int main()
{
long long x, begin, d, n;
std::cin >> x >> begin >> d >> n;
auto end = begin + d * (n - 1);
if (d < 0) {
std::swap(begin, end);
d = -d;
}
if (x <= begin)
std::cout << begin - x << "\n";
else if (end <= x)
std::cout << x - end << "\n";
else {
auto t = (x - begin) / d;
auto lower = begin + t * d;
auto upper = lower + d;
std::cout << std::min(x - lower, upper - x) << "\n";
}
}
上一题
下一题