hdu 4430 Yukari's Birthday (简单数学 + 二分)
Problem - 4430
题意是,给出蜡烛的数量,要求求出r和k,r是蜡烛的层数,k是每一层蜡烛数目的底数。
开始的时候,没有看清题目,其实中间的那根蜡烛是可放可不放的。假设放置中间的那根蜡烛,就可以用等比数列求和公式S=(k^(r+1)-1)/(k-1),因为这个公式,对于固定的r,S(k)是单调递增的,然后可以发现,r的范围是相当的小的,最多不会大于40,然后就可以对于每一个r进行一次二分查找,找到k。但是,对于r==1的时候,用这个公式的是会爆龙龙的,而r==1的时候又是直接可以计算出来的,所以留到之后再算。另外,求的是r*k最小的结果,其实很容易发现,r是越大越好的,所以就从大到小枚举r进行二分查找。如果都没有找到可行解,r==1的时候就唯一解了,所以之前是不用搜索r==1的情况的。
代码如下:
1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 #include <cmath> 5 6 using namespace std; 7 typedef long long LL; 8 9 const LL INF = 9000000000000000000ll; 10 11 LL cal(LL k, int r) { 12 LL ret = 1ll; 13 while (r > 0) { 14 if (r & 1) ret *= k; 15 k *= k; 16 r >>= 1; 17 } 18 return ret; 19 } 20 21 LL find(LL x, int ep) { 22 LL h = 2ll, t = (LL) pow((double) INF, 1.0 / ep), mk = -1ll; 23 while (h <= t) { 24 LL m = h + t >> 1, tmp = cal(m, ep) - 1; 25 if (tmp / (m - 1) < x) h = m + 1; 26 else { 27 t = m - 1; 28 if (tmp % (m - 1)) continue; 29 if (tmp / (m - 1) == x || tmp / (m - 1) == x + 1) mk = m; 30 } 31 } 32 return mk; 33 } 34 35 int main() { 36 LL x; 37 while (cin >> x) { 38 LL a = -1ll, b; 39 for (int i = 50; i > 1; i--) { 40 b = find(x, i + 1); 41 if (b > 0) { 42 a = i; 43 break; 44 } 45 } 46 if (~a) cout << a << ' ' << b << endl; 47 else cout << 1 << ' ' << x - 1 << endl; 48 } 49 return 0; 50 }
View Code
看题真的要仔细,构思以及敲这个代码的时间是相当少的,可是因为题意没有看清,额外增加了十来分钟的debug时间,感觉相当不值啊!
——written by Lyon
转载于:https://www.cnblogs.com/LyonLys/p/hdu_4430_Lyon.html
hdu 4430 Yukari's Birthday (简单数学 + 二分)相关推荐
- hdu 4430 Yukari's Birthday(二分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4430 题意:要在一个蛋糕上放置n个糖果,摆成r个同心圆,每个同心圆的糖果数为k^i,中间圆心可以放一个 ...
- 洛谷试炼场-简单数学问题-二分查找
洛谷试炼场-简单数学问题 P1147 连续自然数和 题解: 本题给定一个数n,求连续自然数的和为n,用一个前缀数组,low_bound,upper_bound,查找是否是同一个数.O(nlog(n)) ...
- python 最小二乘回归 高斯核_从简单数学建模开始:08最小二乘准则的应用(附python代码)...
模型拟合一般来说有这么三种: 切比雪夫近似准则 极小化绝对偏差之和 最小二乘准则 这几个原则各有各的适用范围.其中最小二乘准则是比较容易计算的.接下来我将简要的介绍最小二乘准则以及举例说明如何用pyt ...
- 【简单数学】末日的传说
[简单数学]末日的传说 题目 题目描述 只要是参加jsoi活动的同学一定都听说过Hanoi塔的传说:三根柱子上的金片每天被移动一次,当所有的金片都被移完之后,世界末日也就随之降临了. 在古老东方的幻想 ...
- 【简单数学】【NOIP 20008】笨小猴
[简单数学][NOIP 20008]笨小猴 问题描述: 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法 ...
- HDU - 1495 非常可乐(BFS,数学)
HDU - 1495 非常可乐(BFS,数学) 巨佬的数学解法 #include<iostream> using namespace std; int gcd(int a,int b) { ...
- 878. 第 N 个神奇数字 数学+二分
878. 第 N 个神奇数字 一个正整数如果能被 a 或 b 整除,那么它是神奇的. 给定三个整数 n , a , b ,返回第 n 个神奇的数字.因为答案可能很大,所以返回答案 对 109 + 7 ...
- 经济金融领域简单数学建模和分析:MATLAB成本曲线方程和销售收入直线方程
经济金融领域简单数学建模和分析:MATLAB成本曲线方程和销售收入直线方程 MATLAB代码: x=[0:0.1:5]; y=9*x; plot(x,y,'r','LineWidth',0.5) ho ...
- 斜45度瓦片地图(Staggered Tiled Map)里的简单数学
瓦片地图(Tiled Map)系列文章: 斜45度瓦片地图(Staggered Tiled Map)里的简单数学 瓦片地图注意事项 前段时间在做游戏的地图编辑功能,我们是在一个斜45度视角的场景上,对 ...
最新文章
- Hibernate的主键生成器generator(zhuan)
- c/c++左值和右值
- 吴恩达 coursera AI 专项五第三课(上)总结+作业答案
- Android N混合编译与对热补丁影响深度解析
- jsp的flash小例子
- 洛谷P7361:拜神(SA、二分、主席树、启发式合并)
- Php连接及读取和写入mysql数据库的常用代码
- spark mapWithState 实现
- codeforces 471B. MUH and Important Things 解题报告
- Visitor(访问者)
- supervisor来管理和监控进程
- Excel表格中超链接转图片
- python设计一个二维向量类_鸢尾花——python如何实现支撑向量机模式分类(1)...
- ipa包瘦身之图片无损压缩瘦身
- [Android][sensor][mag]指南针方向偏差,软磁三轴调整
- cad工具箱详细讲解_CAD的工具说明及使用讲解
- 解决安卓apk在其他手机无法安装问题
- 未能找到类型或命名空间名称“DllImport“(是否缺少using指令或程序集引用?)
- python获取工作日_Python的上一个工作日
- 如何学习一个新的计算机概念(协议等),如snmp? 上官网学习【官网集合】
热门文章
- jvm在windows和linux,理解JVM如何使用Windows和Linux上的本机内存
- 专家解读:《个保法》下,企业在商业营销中有哪些红线绝不可触碰?
- 标签体系、用户分群、用户画像「玩味」解读,你沦为形式主义了吗?
- java B2B2C电子商务平台分析之八--配置中心svn示例和refresh
- Shell之awk常用用法
- CSDP是个好东西——CSDP 认证考试简介
- Unity3D 入门 游戏开发 Unity3D portal game development
- mysql在没有任何用户的情况下,如何恢复
- DHTML【5】--HTML
- Nginx+Tomcat负载均衡