D. Physical Education and Buns
time limit per test 2 seconds
memory limit per test 256 megabytes
input standard input
output standard output
The Physical education teacher at SESC is a sort of mathematician too. His most favorite topic in mathematics is progressions. That is why the teacher wants the students lined up in non-decreasing height form an arithmetic progression.
To achieve the goal, the gym teacher ordered a lot of magical buns from the dining room. The magic buns come in two types: when a student eats one magic bun of the first type, his height increases by one, when the student eats one magical bun of the second type, his height decreases by one. The physical education teacher, as expected, cares about the health of his students, so he does not want them to eat a lot of buns. More precisely, he wants the maximum number of buns eaten by some student to be minimum.
Help the teacher, get the maximum number of buns that some pupils will have to eat to achieve the goal of the teacher. Also, get one of the possible ways for achieving the objective, namely, the height of the lowest student in the end and the step of the resulting progression.
Input
The single line contains integer n (2 ≤ n ≤ 103) — the number of students. The second line contains n space-separated integers — the heights of all students. The height of one student is an integer which absolute value doesn't exceed 104.
Output
In the first line print the maximum number of buns eaten by some student to achieve the teacher's aim. In the second line, print two space-separated integers — the height of the lowest student in the end and the step of the progression. Please, pay attention that the step should be non-negative.
If there are multiple possible answers, you can print any of them.
Sample test(s)
input
5
-3 -4 -2 -3 3
output
2
-3 1
input
5
2 -3 -1 -4 3
output
1
-4 2
Note
Lets look at the first sample. We can proceed in the following manner:
don't feed the 1-st student, his height will stay equal to -3;
give two buns of the first type to the 2-nd student, his height become equal to -2;
give two buns of the first type to the 3-rd student, his height become equal to 0;
give two buns of the first type to the 4-th student, his height become equal to -1;
give two buns of the second type to the 5-th student, his height become equal to 1.
To sum it up, when the students line up in non-decreasing height it will be an arithmetic progression: -3, -2, -1, 0, 1. The height of the lowest student is equal to -3, the step of the progression is equal to 1. The maximum number of buns eaten by one student is equal to 2.
题意:
给你n个数,改变某些数的值(+1或者-1)和位置,使他们形成递增的等差数列,求当个数值改变的量尽可能小(k) 输出k,并且输出等差数列首项和公差。
分析:
因为位置可以改变,肯定要先对数据a[1~n]排序,这题我们直接暴力枚举公差d,我们知道等差数列的公式为f(n)=d*(i-1)+b,设b为首项,则每一项a[i]就变为了(i-1)*d+b,变化量为a[i]-(i-1)*d-b,我们在所有的变化量中选出最大Max和最小Min,即k的范围实在Min和Max,选一个点到区间端点的最大值最小,当然就是中点。即k=(Max-Min+1)/2。
对于首项,肯定是最小的k+Min
看了一下午别人题解。我还是有点晕,回来慢慢品尝把。
















