Contest20140710 eagleeggs
eagleeggs|eagleeggs.in|eagleeggs.out
题目描述:
共有N个硬度相同的鹰蛋,硬度是一个整数(并且已知其不大于H),表示这个蛋从天上掉下来不摔碎的最大高度。为了找出这个最大高度,可以进行一些试验,每次实验把一个鹰蛋从一定高度扔下,根据这个鹰蛋是否摔碎可以知道真实的硬度是否大于你抛下的高度。
求在最坏情况下试验的最少次数。
输入格式:
一行两个整数N,H
输出格式:
一行一个整数,表示硬度
样例输入:
2
5
样例输出:
3
数据范围:
30%
N<=1000 H<=1000
对另外30%
N<=100000 H<=100000
对所有数据N<=10^9
H<=10^9
觉得课上dp讲的太复杂了,用组合数一下就做出来了。
注意一下爆int的处理
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define PROB "eagleeggs"
#define MAXN 10100
#define INF 0x3f3f3f3f
typedef unsigned long long qword;
qword dp[MAXN][];
qword c(int x,int y)//x<=30
{
if (y==)return x;
if (y==)return x*(x-)/;
if (y>x)return ;
dp[][]=;
int i,j;
for (i=;i<=x;i++)
{
dp[i][]=i;
for (j=;j<=x;j++)
{
dp[i][j]=dp[i-][j]+dp[i-][j-];
}
if (dp[i][y]>=INF)return INF;
}
return dp[x][y];
}
qword hgt(int n,int t)
{
qword ans=;
qword temp=;
int i,j;
for (i=n;i>;i--)
{
temp=c(t,i);
if (temp==INF)return INF;
ans+=temp;
if (ans>INF)return INF;
}
return ans;
}
int main()
{
freopen(PROB".in","r",stdin);
freopen(PROB".out","w",stdout);
int i,j,k;
int n;
qword h;
cin>>n>>h;
int l=,r=;
int mid;
if (n==)
{
printf("%d\n",h);
return ;
}
if (n>||(<<n)>=h)
{
printf("%d\n",(int)ceil(log2(h)));
return ;
}
if (n!=)r=;
while (l+<r)
{
mid=(l+r)/;
if (h<=hgt(n,mid))
{
r=mid;
}else
{
l=mid;
}
}
printf("%d\n",r);
}
Contest20140710 eagleeggs的更多相关文章
- Contest20140710 sequence
sequence|sequence.in|sequence.out 题目描述: 给定一个整数K和长为N的数列{Ai},求有多少个子串(不含空串)的和为K的倍数.(在这里子串表示{A[i]..A[j]} ...
- Contest20140710 loop bellman-ford求负环&&0/1分数规划
loop|loop.in|loop.out 题目描述: 给出一个有向带权图,权为边权,求一个简单回路,使其平均边权最小. 简单回路指不多次经过同一个点的回路. 输入格式: 第一行两个整数,表示图的点数 ...
随机推荐
- onInterceptTouchEvent和onTouchEvent调用时序
onInterceptTouchEvent()是ViewGroup的一个方法,目的是在系统向该ViewGroup及其各个childView触发onTouchEvent()之前对相关事件进行一次拦截,A ...
- VC printf输出彩色字体
在VC下使用SetConsoleTextAttribute()函数可以改变当前控制台的前景色和背景色,从而达到输出彩色字体的效果. 使用的方法也很简单,具体代码如下: #include <win ...
- C++ 读取XML文件(tinyXML库的应用)
C++读取xml有很多第三方的xml解析库,最近使用tinyxml库来解析,下面直接上应用例子: Skin.xml文档内容如下: <UI> <Image name="ban ...
- ASP.NET操作DataTable
.创建 datatable DataTable dt=new Datable();//可以给表创建一个名字,tb .给表加个列名: dt.Columns.Add("id", typ ...
- Java动态调用webService,axis2动态调用webService
Java动态调用webService axis2动态调用webService >>>>>>>>>>>>>>>& ...
- JQuery字符串替换replace方法
在日常的js开发中,常常会用到JQuery, 当要把字符串中的内容替换时,如果使用类似C#的string.replace方法,如下 var str='aabbccaa'; str=str.replac ...
- ASP.NET得到系统相关信息
1. 在ASP.NET中专用属性: 获取服务器电脑名:Page.Server.ManchineName 获取用户信息:Page.User 获取客户端电脑名:Page.Request.UserHos ...
- C++的MFC,与C#的.NET
转载:http://blog.sina.com.cn/s/blog_7f5bde5c0101hk5n.html 以下摘自各问答网站.博客论坛: [1]MFC早已过时,现在C++多数是用来编写底层方法而 ...
- 尽量不要用select into 复制表
select into 复制表会带来灾难后果,因为只是复制了一个外壳,就像克隆人,有躯体没意识,像原表的主键 外键 约束 触发器 索引都不会被复制过来, 创建一个表:CREATE TABLE [dbo ...
- strace跟踪操作的详细内容