CodeForces 689C  Mike and Chocolate Thieves

题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=412145

题目大意:给定一个数字n,问能不能求得一个最小的整数x,使得在1-x范围内,可以取的n组T*k^3<=x。T,k为任意整数,需要在小于等于x的情况下,凑够n对T,k,使其满足T*k^3<=x。若x存在,则输出x,若x不存在,则输出-1。

解题思路:

先看k=2,(1,2,4,8)/(2,4,8,16)/(3,6,12,24)....

k=3,(1,3,9,27)/(2,6,18,54)......

对应某个k,在x范围内,其能取到的最大组数为x/(k^3),因为合法组数具有单调性,可以采用二分的方法求解。

两种情况很好理解,当当前数量已大于要求数量,那便移动右边界,当当前数量小于要求数量,则移动左边界,但相等时,并不一定就是解。因为,题目要求是合法时最小的整数解,故而继续移动右边界。

解题代码:

#include <cstdio>
#include <iostream>
using namespace std;
#define ll long long
ll solve(ll n)
{
  ll ans=0;
  for(ll i=2;;i++)
  {
   if(n/(i*i*i)==0) break;
   ans+=n/(i*i*i);
  }
  return ans;
}
int main()
{
 ll m;
 cin>>m;
 int flag=0;
 ll l=1,r=5e15,ans;
 while(l<=r)
 {
  ll mid=(l+r)/2;
  long long cnt=solve(mid);
  if(cnt>m) r=mid-1;
  else if(cnt<m) l=mid+1;
        else
        {
         ans=mid;
         flag=1;
         r=mid-1;
        }
 }
 printf("%lld\n",flag?ans:-1);
 return 0;
}
时间: 2024-08-06 12:00:55

CodeForces 689C  Mike and Chocolate Thieves的相关文章

CodeForces 689C Mike and Chocolate Thieves (二分)

原题: Description Bad news came to Mike's village, some thieves stole a bunch of chocolates from the local factory! Horrible! Aside from loving sweet things, thieves from this area are known to be very greedy. So after a thief takes his number of choco

CodeForces 689C Mike and Chocolate Thieves (二分最大化最小值)

题目并不难,就是比赛的时候没敢去二分,也算是一个告诫,应该敢于思考…… #include<stdio.h> #include<iostream> using namespace std; int main() { long long n; scanf("%I64d",&n); long long left=1,right=1e18,mid,num,m,s; long long ans=-1; while(left<=right) { mid=(le

Codeforces 689C - Mike and Chocolate Thieves

题意:有四个小偷要偷巧克力,每个小偷偷的巧克力是前一个小偷的k倍.例:a,ak,ak^2,ak^3.然后给出你小偷头巧克力的方案数,问:符合条件的条件下,背包中巧克力量最大值最小是多少. 分析:最大值最小.所以二分n. 1 /************************************************ 2 Author :DarkTong 3 Created Time :2016/7/7 17:06:12 4 File Name :C.cpp 5 **************

创建 MVC的模板页,引用多个Css(期间,产生 HTTP 错误 500.23 - Internal Server Error   检测到在集成的托管管道模式下不适用的 ASP.NET 设置。)

首先,创建一个_Layut.cshtml的模板页 @using System.Web.Optimization <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>666</title> @Styles.Render("~/Content/Css/css&q

hdu 4941 Magical Forest(STL map &amp; 结构体运用)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4941 Magical Forest Time Limit: 24000/12000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 220    Accepted Submission(s): 105 Problem Description There is a forest c

lind 语 api 数据的安全性  第四弹

web api的安全性怎么保证呢. 一般公司会自己封装一套请求的规范. 下面来看看lind语里的webapi安全规范 step one 先看下 diagram: 学而思: 从上面的图分析一下: 如果我们的webapi开放给第三方的平台那么:这里的规范是否适用呢. 思考一下. 成为习惯 step tow .... 我们来看下代码: 注意 我们是因为里面又两个:一个 是 看 的我 .一个是 学的我.一个是思的我. 所以 这里是有三个我 看我曰:我去翻码.

前端  验证一下  不同div加载同一图片 呈现不同效果

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>显示我们的变化</title> <link rel="stylesheet" type="text/css" href="index.css"> <style> .div2{

POJ 3061  Subsequence   尺取法   挑战146页

---恢复内容开始--- Subsequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10487   Accepted: 4337 Description A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, and a positive integer S (S < 10

TCP 和 UDP 编程 —— Android

参考了<深入理解Android网络编程>这本书 我们都知道TCP和UDP最大的区别就是,TCP是面向连接的,而UDP是无连接的. 那么使用TCP和UDP编程,事实上差别也是在这里: 1.使用TCP通讯: 分为客户端和服务器,主要是先初始化,像IP,端口这些肯定要先绑定的,服务器等待客户端连接,连接之后,通过流进行数据的收发. A.首先是服务器端: 步骤1:初始化——ServerSocket serverCocket = null://创建一个ServerSocket对象 serverCocke