测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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"; } }
上一题 下一题