HDU

来源:互联网 发布:08最新电影源码 编辑:程序博客网 时间:2024/06/10 00:41

题意:给出两种操作:

如果按下按钮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;}


原创粉丝点击