题意:给出两种操作:
如果按下按钮1,会使数量+1,总价对应增长单价数目(因此按下按钮1不会改变单价)
如果按下按钮2,会使总价加1,数量不变(按下按钮2会使单价增加)
现在问至少多少步可以使得 按钮1数字为x, 按钮2数字为y;
思路:很明显的贪心思路是先按按钮2到一定单价,然后按一下按钮1,重复此步骤直到满足题意,但是关键是按钮2每次要按多少下,其实这取决于最后的单价,因为单价只能变大不能变小,因我们每一步操作都要保证单价不能超过最终单价的大小,分析到这,就可以求出每次贪心按y的上限了,要注意的一点就是最终总价只是要显示出来的是y,并不一定真正是y,但一定不会大于等于 y + 1.
PS:eps 从1e-1到1e-6都能过,再高就会wa
代码:
#include<bits/stdc++.h>
using namespace std;
const double eps = 1e-4;
int main()
{
double x, y;
while(~scanf("%lf %lf", &x, &y))
{
if(x > y)
{
printf("-1\n"); continue;
}
int ans = x - 1, delta;
double one = (y + 1 - eps) / x; // 单价
double pre = 1; //上一次y的真实值
for(int i = 1; i < x + eps; i++)
{
delta = floor(one * i - pre);
ans += delta;
pre += delta;
pre = pre / i * (i + 1); // 按一次x以后的效果
}
printf("%d\n", ans);
}
return 0;
}