1854: zbj的可乐
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 298 Solved: 85
[Submit][Status][Web Board]
Description
zbj最近特别想喝可乐,然而可口可乐有一个万年梗的活动就是....四个瓶盖换一瓶可乐的活动
现在zbj想喝n瓶可乐,一瓶可乐需要k元,问他最少需要花多少钱?
ps.一瓶可乐只有一个瓶盖..当然这不是脑筋急转弯,zbj并不能向别人借瓶盖。
Input
有多组样例,每一行输入一个正整数n,k(0<=n<=100000000 1<=k<=200) (请不要嘲讽zbj能喝...我们要友好和谐)
Output
每一行输出一个正整数表示zbj最小需要花的钱
Sample Input
1597 3
Sample Output
3594
HINT
【解析】
这种被坑过的题目还是会跳进去第二次。。。。。
好吧,二分法去check就行。别跟我一样傻老想着找条公式算啊算了。
哦还有要long long数据量摆在那里。200*1忆你懂得
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll check(int a)
{
ll sum = a;
while (a >= 4)
{
sum += a / 4;
a = a % 4 + a / 4;
}
return sum;
}
ll binary_find(ll left, ll right,ll target)
{
ll middle, count;
while (left < right)
{
middle = (left + right) / 2;
count = check(middle);
if (count > target)right = middle;
else if (count < target)left = middle + 1;
else return middle;
}
return left;
}
int main()
{
long long n, k;
while (~scanf("%lld%lld", &n, &k))
{
if (n)
printf("%lld\n", (ll)binary_find(1, n, n)*k);
else
printf("0\n");
}
return 0;
}