題意:給出兩種操作:
如果按下按鈕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;
}