分析题目后,得到要求的是最接近n的一个数,并且这个数字能写成1+2+3+....+x = ans这种形式。

要求的是最大的值。

这题就直接二分去做吧。二分出一个f(mid)<=n的最大值。

最后的end就是所求的f(end)

为什么呢?,我来分析下我这个二分是怎么实现的

   while (begin<=end)
{
LL mid = (begin + end) / ;
if (f(mid) == n)
{
printf ("Case #%d: %lld\n",++ff,n);
return ;
}
if (f(mid) < n)
{
begin = mid+; //去找一个可能比n大的
}
else end = mid-; //如果比n大了的话。就回来找一个小的。
//cout<<f(mid)<<endl;
}

当f(mid)<n的时候 begin = mid+1,如果这个时候[mid+1,end]的所有数字的f()值都大于n呢?那么,最后一步就肯定是begin=end,然后end-1.去到的是第一个小于n的f()值。

其他也是一样分析啦。

f(end),第一个小于n的f值。

f(begin),第一个大于n的f值。考虑最后一步begin==end的时候,就能看清楚了。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL; #include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
LL f(LL x)
{
if (x&)
{
return (x+)/*x;
}
else return x/*(x+);
}
int ff;
void work ()
{
LL n;
cin>>n;
LL begin=,end=2e9;
while (begin<=end)
{
LL mid = (begin + end) / ;
if (f(mid) == n)
{
printf ("Case #%d: %lld\n",++ff,n);
return ;
}
if (f(mid) < n)
{
begin = mid+; //去找一个可能比n大的
}
else end = mid-; //如果比n大了的话。就回来找一个小的。
//cout<<f(mid)<<endl;
}
printf ("Case #%d: %lld\n",++ff,f(end));
return ;
} int main()
{
#ifdef local
freopen("data.txt","r",stdin);
#endif
int t;
cin>>t;
while(t--) work();
return ;
}

最新文章

  1. 目前quanben评十大哲学家
  2. C# List中随机获取N个字符
  3. [转]qt中文乱码问题
  4. LoadRunner - 实战,转发
  5. bzoj 1187: [HNOI2007]神奇游乐园 插头dp
  6. C++中new和不new的区别
  7. cocos2dx-3.0(13)------SpriteBatchNode与SpriteFrameCache渲染速度
  8. Netty轻量级对象池实现分析
  9. 构建微服务(Building Microservices)-PDF 文档
  10. Bootstrap快速入门
  11. css怎样让背景充满整个屏幕
  12. css去除ios文本框默认圆角
  13. 2019-04-09 SpringBoot+Druid+MyBatis+Atomikos 的多数据源配置
  14. 明令禁止下,哪些APP在违规获取用户信息?
  15. 基于centOS7:新手篇→nginx安装
  16. Oracle分析函数row_number()等的使用实例
  17. spring cloud 入门系列一:初识spring cloud
  18. android speakerphone/
  19. HDU1241 Oil Deposits 2016-07-24 13:38 66人阅读 评论(0) 收藏
  20. Glide填坑指南

热门文章

  1. bzoj 4066 简单题——KDtree(带重构)
  2. rsync 端口更换(默认873)
  3. HDOJ1114(完全背包)
  4. 三、使用maven创建scala工程(scala和java混一起)
  5. JVM体系结构之六:堆Heap之1
  6. Python模块-configparse模块
  7. LaTeX技巧203:如何实现等号对齐_LaTeX_Fun_新浪博客
  8. 10_android打包的过程
  9. Impala介绍
  10. Centos 查看机器型号