HDU4430 Yukari's Birthday(枚举+二分)
Yukari's Birthday HDU4430
就是枚举+二分:
注意处理怎样判断溢出。。。(因为题目只要10^12)
先前还以为要用到快速幂和等比数列的快速求和(但肯定会超__int64)
而且这样判断会超时的。。。
还有题目中的And it's optional to place at most one candle at the center of the cake. (中间的蜡烛可有可无)
还有观察数据就知道:因为n最大10^12,r最多枚举到40,然后二分k的结果,看是否有符合条件的k存在。
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
const __int64 N=;
__int64 fun1(__int64 k,__int64 r,__int64 n)
{
__int64 s=,t=k;
for(int i=;i<=r;i++)
{
s+=t;
if(s > n)//判断在求和的过程中是否已经比n大(可省时很多且不会超__int64)
return N*N;
t*=k;
}
return s;
}
__int64 fun(__int64 r,__int64 n)
{
if(r == )
return n;
__int64 mid,p,lef=,rig=N;
while(lef <= rig)
{
mid=(lef+rig)/;
p=fun1(mid,r,n);
if(p == n)
return mid;
if(n > p)
lef=mid+;
else
rig=mid-;
}
return -;
}
int main()
{
__int64 n,p,r,rr,rp;
while(scanf("%I64d",&n)!=EOF)
{
rr=N;rp=N;
for(r=;r<=;r++)//只要到40就行了
{
p=fun(r,n);//中间放蜡烛
if(p!=-)
if(r*p < rr*rp || (r*p == rr*rp && r < rr))
{
rr=r;
rp=p;
}
p=fun(r,n-);//中间不放蜡烛
if(p!=-)
if(r*p < rr*rp || (r*p == rr*rp && r < rr))
{
rr=r;
rp=p;
}
}
printf("%I64d %I64d\n",rr,rp);
}
return ;
}
HDU4430 Yukari's Birthday(枚举+二分)的更多相关文章
- zoj 3665 Yukari's Birthday(枚举+二分)
Yukari's Birthday Time Limit: 2 Seconds Memory Limit: 32768 KB Today is Yukari's n-th birthday ...
- hdu 4430 Yukari's Birthday 枚举+二分
注意会超long long 开i次根号方法,te=(ll)pow(n,1.0/i); Yukari's Birthday Time Limit: 12000/6000 MS (Java/Others) ...
- CSU OJ PID=1514: Packs 超大背包问题,折半枚举+二分查找。
1514: Packs Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 61 Solved: 4[Submit][Status][Web Board] ...
- 4 Values whose Sum is 0(枚举+二分)
The SUM problem can be formulated as follows: given four lists A, B, C, D of integer values, compute ...
- hdu4430之枚举+二分
Yukari's Birthday Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- hdu4430 枚举+二分
Yukari's Birthday Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU - 4430 Yukari's Birthday(二分+枚举)
题意:已知有n个蜡烛,过生日在蛋糕上摆蜡烛,将蜡烛围成同心圆,每圈个数为ki,蛋糕中心最多可摆一个蜡烛,求圈数r和看,条件为r*k尽可能小的情况下,r尽可能小. 分析:n最大为1012,k最少为2,假 ...
- Codeforces Round #379 (Div. 2) C. Anton and Making Potions 枚举+二分
C. Anton and Making Potions 题目连接: http://codeforces.com/contest/734/problem/C Description Anton is p ...
- HDU 4282 A very hard mathematic problem --枚举+二分(或不加)
题意:问方程X^Z + Y^Z + XYZ = K (X<Y,Z>1)有多少个正整数解 (K<2^31) 解法:看K不大,而且不难看出 Z<=30, X<=sqrt(K) ...
随机推荐
- PTGM and APTM
1. 性能测试过程模型(PTGM) PTGM模型包括以下几个步骤: 测试前期的准备 测试工具的引入 测试计划 测试设计与开发 测试执行与管理 测试分析 测试前期准备:主要任务为保证系统稳定和建立合适的 ...
- 关于openssl几个API的一点小收获
今天心血来潮突然想搞搞openssl了,趁着端午小假,刚好有空可以鼓捣孤岛自己喜欢的东西,出去东奔西跑的实在太造孽了,还是宅起来给自己充充电吧.下载openssl最新代码1.0.1g,修复了" ...
- workflow GetListIdByName 获取表名
1.Assign 获取表的地址 和表名 2.HttpsendWithSuspend==HttpSend 3.ParseDynamicValue 4.GetDynamicValuePropertie ...
- iOS的后台任务
翻译自:http://www.raywenderlich.com/29948/backgrounding-for-ios (代码部分若乱码,请移步原链接拷贝) 自ios4开始,用户点击home按钮时, ...
- Web程序的运行原理及流程(一)
自己做Web程序的开发也有两年多了 从最开始跟风学框架 到第一用上框架的欣喜若狂 我相信每个程序员都是这样过来的 在大学学习一门语言 学会后往往很想做一个实际的项目出来 我当时第一次做WEB项目看 ...
- 1 Java线程的内存可见性
Java内存的可见性 可见性: 一个线程对共享变量的修改,能够及时被其它线程看到 共享变量: 如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量 Java内存模型(JM ...
- 从多列的DataTable里取需要的几列(转)
方法一: 也是广为人知的一种: YourDataTable.Columns.Remove("列名"); 但是这种情况只适合于去掉很少列的情况. 如果有很多列我却只要一两列呢,那就得 ...
- javascript中关于深复制与浅复制的问题
在javascript中,变量的类型分为基本类型和引用类型. 对于基本类型的变量来说,值的复制以及作为函数参数实参传递的过程都是值的复制传递,换句话说,是会在内存中开辟出一个新空间用于存放新的值的.这 ...
- cannot determine the location of the vs common tools folder
问题:打开"VS2010开发人员命令提示后",上面提示"cannot determine the location of the vs common tools fold ...
- css3选择器总结
1.p[class^/$/*=td]所有p标签的前面带有td/后面带有td/所有带有td的类的三种样式. 2.div:first-child/last-child/nth-child()在父元素下的第 ...