Codeforces 689C. Mike and Chocolate Thieves(二分)

题目链接:http://codeforces.com/contest/689/problem/C

题意:说实话,这个题的意思我愣了看了十多遍没看懂,最后还是看的别人的题解明白的。

       意思就是:有4个贼,他们共用一个容量为n的背包,他们偷的东西量为等比数列,即a*k,a*k*k,a*k*k*k,给出等比数列可能的组合数m,问n的为多少。

引用博文:https://blog.csdn.net/baidu_19306071/article/details/51918518?utm_source=blogxgwz0

 

自己的AC代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
long long  check(long long  x)
{
	long long cnt=0;
	for( long long i=2;(i*i*i)<=x;i++)//用pow会出错,我暂时也不知道为什么
	{
		cnt+= x/(i*i*i); 
	}
	return cnt;
}
int main()
{
	long long m;
	scanf("%lld",&m);
	long long  l=0,r=1e18;//一个范围很广的二分
	while(l<r)
	{
		long long mid=(l+r)>>1;
	//	cout<<mid<<endl;
		if(check(mid)<m)
		l=mid+1;
		else r=mid;
	}
	//cout<<l<<endl;
	if(check(l)==m) cout<<l<<endl;
	else cout<<"-1"<<endl;
	return 0;
 } 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值