轻松突破,二分查找
2017-03-19 13:50
190 查看
这周讲的题目是二分,我就简单的说一下二分,二分就是在解空间有序的前提下,对半逐步逼近答案
这种方法很实在,很好用
Yukari’s Birthday
Today is Yukari’s n-th birthday. Ran and Chen hold a celebration party for her. Now comes the most important part, birthday cake! But it’s a big challenge for them to place n candles on the top of the cake. As Yukari has lived for such a long long time, though she herself insists that she is a 17-year-old girl.
To make the birthday cake look more beautiful, Ran and Chen decide to place them like r ≥ 1 concentric circles. They place k i candles equidistantly on the i-th circle, where k ≥ 2, 1 ≤ i ≤ r. And it’s optional to place at most one candle at the center of the cake. In case that there are a lot of different pairs of r and k satisfying these restrictions, they want to minimize r × k. If there is still a tie, minimize r.
Input
There are about 10,000 test cases. Process to the end of file.
Each test consists of only an integer 18 ≤ n ≤ 10 12.
Output
For each test case, output r and k.
Sample Input
Sample Output
这个思路就是确定r (k>=2 ,所以r<=40)再二分查找k…
注意数据比较大时候容易溢出,神奇的是:cout好像不能用
这种方法很实在,很好用
Yukari’s Birthday
Today is Yukari’s n-th birthday. Ran and Chen hold a celebration party for her. Now comes the most important part, birthday cake! But it’s a big challenge for them to place n candles on the top of the cake. As Yukari has lived for such a long long time, though she herself insists that she is a 17-year-old girl.
To make the birthday cake look more beautiful, Ran and Chen decide to place them like r ≥ 1 concentric circles. They place k i candles equidistantly on the i-th circle, where k ≥ 2, 1 ≤ i ≤ r. And it’s optional to place at most one candle at the center of the cake. In case that there are a lot of different pairs of r and k satisfying these restrictions, they want to minimize r × k. If there is still a tie, minimize r.
Input
There are about 10,000 test cases. Process to the end of file.
Each test consists of only an integer 18 ≤ n ≤ 10 12.
Output
For each test case, output r and k.
Sample Input
18 111 1111
Sample Output
1 17 2 10 3 10
这个思路就是确定r (k>=2 ,所以r<=40)再二分查找k…
注意数据比较大时候容易溢出,神奇的是:cout好像不能用
#include <iostream> #include <cstring> #include <math.h> #include <cstdio> #define inf 0x3f3f3f3f using namespace std; long long n; int check(int k,int r){ long long e=1,i,sum=0; for(i=1;i<=r;i++){ e=e*k; sum+=e; } if(sum+1<n)return 0; if(sum>n)return -1; if(sum==n||sum+1==n)return 1; } int main() { while(cin>>n){ long long r,st,ed,mid,res=n-1,k=n-1,t=1; for(r=2;r<=60;r++){ st=0; ed=pow(1e13,1.0/r)+1; while(ed-st>1){ mid=st+(ed-st)/2; if(check(mid,r)==-1) ed=mid; if(check(mid,r)==0)st=mid; if(check(mid,r)==1) { if(mid*r<res){ k=mid ; t=r; } if(mid*r==res){ if(r<t){ t=r; k=mid; } } break; } } } printf("%lld %lld\n",t,k); } return 0; }
相关文章推荐
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第28讲_js二维数组_js冒泡排序_二分查找_学习笔记_源代码图解_PPT文档整理
- 二分查找突破上下限,树状数组的三种应用。
- 彻底轻松搞定顺序存储结构元素的二分查找的时间复杂度优势以及如何算时间复杂度
- 数据结构实验之查找四:二分查找
- pku 2002 Squares 二分查找 或者 hash
- 递归 -- 二分查找程序
- 二分查找
- 【二分查找】用C语言实现一个有序数组的二分查找
- hdu 1969 Pie(二分查找)
- Java查找算法——二分查找
- 算法题:二分查找
- 二分查找
- 用递归实现的二分查找
- 二分查找(一) 常见错误
- java 自我知识总结(九) 二分查找
- python实现二分查找
- 分治法-----二分查找
- 顺序查找及二分查找--Java
- POJ 1064 Cable master [二分查找] 《挑战程序设计竞赛》3.1
- 面试中常见的数组的操作:遍历,最值,反转,冒泡排序,二分查找(附代码)