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 (简单数学 + 二分)相关推荐

  1. hdu 4430 Yukari's Birthday(二分)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4430 题意:要在一个蛋糕上放置n个糖果,摆成r个同心圆,每个同心圆的糖果数为k^i,中间圆心可以放一个 ...

  2. 洛谷试炼场-简单数学问题-二分查找

    洛谷试炼场-简单数学问题 P1147 连续自然数和 题解: 本题给定一个数n,求连续自然数的和为n,用一个前缀数组,low_bound,upper_bound,查找是否是同一个数.O(nlog(n)) ...

  3. python 最小二乘回归 高斯核_从简单数学建模开始:08最小二乘准则的应用(附python代码)...

    模型拟合一般来说有这么三种: 切比雪夫近似准则 极小化绝对偏差之和 最小二乘准则 这几个原则各有各的适用范围.其中最小二乘准则是比较容易计算的.接下来我将简要的介绍最小二乘准则以及举例说明如何用pyt ...

  4. 【简单数学】末日的传说

    [简单数学]末日的传说 题目 题目描述 只要是参加jsoi活动的同学一定都听说过Hanoi塔的传说:三根柱子上的金片每天被移动一次,当所有的金片都被移完之后,世界末日也就随之降临了. 在古老东方的幻想 ...

  5. 【简单数学】【NOIP 20008】笨小猴

    [简单数学][NOIP 20008]笨小猴 问题描述: 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法 ...

  6. HDU - 1495 非常可乐(BFS,数学)

    HDU - 1495 非常可乐(BFS,数学) 巨佬的数学解法 #include<iostream> using namespace std; int gcd(int a,int b) { ...

  7. 878. 第 N 个神奇数字 数学+二分

    878. 第 N 个神奇数字 一个正整数如果能被 a 或 b 整除,那么它是神奇的. 给定三个整数 n , a , b ,返回第 n 个神奇的数字.因为答案可能很大,所以返回答案 对 109 + 7  ...

  8. 经济金融领域简单数学建模和分析:MATLAB成本曲线方程和销售收入直线方程

    经济金融领域简单数学建模和分析:MATLAB成本曲线方程和销售收入直线方程 MATLAB代码: x=[0:0.1:5]; y=9*x; plot(x,y,'r','LineWidth',0.5) ho ...

  9. 斜45度瓦片地图(Staggered Tiled Map)里的简单数学

    瓦片地图(Tiled Map)系列文章: 斜45度瓦片地图(Staggered Tiled Map)里的简单数学 瓦片地图注意事项 前段时间在做游戏的地图编辑功能,我们是在一个斜45度视角的场景上,对 ...

最新文章

  1. Hibernate的主键生成器generator(zhuan)
  2. c/c++左值和右值
  3. 吴恩达 coursera AI 专项五第三课(上)总结+作业答案
  4. Android N混合编译与对热补丁影响深度解析
  5. jsp的flash小例子
  6. 洛谷P7361:拜神(SA、二分、主席树、启发式合并)
  7. Php连接及读取和写入mysql数据库的常用代码
  8. spark mapWithState 实现
  9. codeforces 471B. MUH and Important Things 解题报告
  10. Visitor(访问者)
  11. supervisor来管理和监控进程
  12. Excel表格中超链接转图片
  13. python设计一个二维向量类_鸢尾花——python如何实现支撑向量机模式分类(1)...
  14. ipa包瘦身之图片无损压缩瘦身
  15. [Android][sensor][mag]指南针方向偏差,软磁三轴调整
  16. cad工具箱详细讲解_CAD的工具说明及使用讲解
  17. 解决安卓apk在其他手机无法安装问题
  18. 未能找到类型或命名空间名称“DllImport“(是否缺少using指令或程序集引用?)
  19. python获取工作日_Python的上一个工作日
  20. 如何学习一个新的计算机概念(协议等),如snmp? 上官网学习【官网集合】

热门文章

  1. jvm在windows和linux,理解JVM如何使用Windows和Linux上的本机内存
  2. 专家解读:《个保法》下,企业在商业营销中有哪些红线绝不可触碰?
  3. 标签体系、用户分群、用户画像「玩味」解读,你沦为形式主义了吗?
  4. java B2B2C电子商务平台分析之八--配置中心svn示例和refresh
  5. Shell之awk常用用法
  6. CSDP是个好东西——CSDP 认证考试简介
  7. Unity3D 入门 游戏开发 Unity3D portal game development
  8. mysql在没有任何用户的情况下,如何恢复
  9. DHTML【5】--HTML
  10. Nginx+Tomcat负载均衡