膜 社论(egg drop)
题面
楼 个鸡蛋,从 楼及以上扔下去会碎,不能再测试 .
问至少需要扔几次确定 .
, .
题解
令 表示 个鸡蛋丢 次能确定的最高楼层(其实是 OEIS A180975 / A131251) .
显然最后一个走第 步的时候,和上一步之间的空隙不能超过 ,不然中间无法判定 .
于是
即 .
我们转成一个二项式系数的形式:
过程(artalter)
令 .
则
妈呀这不是组合数吗?
于是就可以轻易建立 到 的联系,从而推出式子了 .
随便推推
然后随便线性做了 .
外面套一个二分就完了 .
时间复杂度 .
细节: 增长很快,大于 直接丢掉,用 double
注意浮点误差
代码
using namespace std;
typedef long long ll;
typedef __int128 i128;
const int N = 111;
const double LIM = 1e18;
ll n, k;
inline bool check(ll x)
{
i128 now=1, ans=0;
for (int l=0; l<k; l++)
{
if (1.0*now*(x-l)/(l+1) > LIM) return true;
now = now*(x-l)/(l+1); ans += now;
if (ans >= n) return true;
} return ans >= n;
}
int main()
{
int T; scanf("%d", &T);
while (T--)
{
scanf("%lld%lld", &n, &k);
ll l=0, r=n, ans=-1;
while (l <= r)
{
ll mid = (l + r) >> 1;
if (check(mid)){r = mid-1; ans = mid;}
else l = mid+1;
}
printf("%lld\n", ans);
}
return 0;
}
以下是博客签名,正文无关
本文来自博客园,作者:yspm,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/15887123.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2020-02-12 浅谈排序算法[动图]