惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
A
About on SuperTechFans
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 叶小钗
博客园 - 聂微东
博客园 - Franky
Apple Machine Learning Research
Apple Machine Learning Research
罗磊的独立博客
量子位
博客园 - 三生石上(FineUI控件)
Recent Announcements
Recent Announcements
The GitHub Blog
The GitHub Blog
B
Blog RSS Feed
T
The Blog of Author Tim Ferriss
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
宝玉的分享
宝玉的分享
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Stack Overflow Blog
Stack Overflow Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

OhYee 博客

小鹏辅助驾驶测评|OhYee 博客 小鹏非支持手机开启自动解锁|OhYee 博客 使用函数计算实现 301 重定向|OhYee 博客 针对 HTML 内容使用 Ant Design 图片弹框|OhYee 博客 博客进程泄露及僵尸进程解决|OhYee 博客 蓝易云服务器体验|OhYee 博客 SSH 调起本地 VSCode|OhYee 博客 【2022 秋招内推】阿里云后端研发工程师|OhYee 博客 使用函数计算获取 IP 地址信息|OhYee 博客 正确获取客户端 IP/HTTP Header 也可能重复|OhYee 博客 评测 Oculus Quest2 及 BigScreen|OhYee 博客 NextJS 热重载保留状态|OhYee 博客 如何优雅地贴 gist 代码|OhYee 博客 Linux 精细化文件权限|OhYee 博客 VSCode 容器开发环境|OhYee 博客 Clash 的不兼容更新排查|OhYee 博客 Zeek 导出 PCAP|OhYee 博客 记一次 ssh 配置问题|OhYee 博客 Git Commit 规范化工具|OhYee 博客 谈谈《星之卡比-探索发现》|OhYee 博客 VSCode 快捷键绑定 Shell 命令|OhYee 博客 ASN.1 语法及 X.509 证书格式解析解析|OhYee 博客 腾讯企业邮箱忽略 MX 记录发信|OhYee 博客 Chrome/Edge 标签组插件|OhYee 博客 【应届内推】阿里云后端研发工程师|OhYee 博客 损坏的 Typecho 备份处理为 JSON|OhYee 博客 VS Code VIM 插件高效使用|OhYee 博客 SSH 正反向代理|OhYee 博客 Let's Encrypt 根证书过期引发的问题|OhYee 博客 OpenWRT 忽略内核依赖|OhYee 博客
AOJ 1309.lls和神话故事|OhYee 博客
2017-11-27 · via OhYee 博客

这是一篇最后编辑于 8 年前 的文章,其内容可能与目前实际情况差异较大,请注意甄别

题目

{% fold 点击显/隐题目 %}

lls上体育课遇到一个朋友,这个人很会说故事,而且都是神话故事。 这一天lls想听故事了,于是找到了这个朋友,朋友说了一个故事: 很久很久以前…有一个皇帝,他很富有,有很多很多稻米,并且让许多建筑家一起建筑了一个粮仓,专门用来盛放稻谷,容量是n粒稻米,已经装满了。让建筑家没想到的是,稻米是好东西,鸟儿也喜欢吃。为了让皇帝满意,每天早上会有人固定向里面加m粒稻谷(但不能超过容量)。而每天晚上会有鸟儿来偷吃稻米,并且每天会增加一只鸟儿(第一天1只,第二天2只……),每只鸟儿一次吃一粒稻米。如果晚上剩下的稻米不够鸟儿吃了,那没吃到的鸟儿只能回去睡觉了。 朋友故事还没说完,lls脑海中瞬间想到稻米终将会吃完,并一会儿就指出了粮仓第一次为空的那天。现在你要完成同样的事。

第一行为两个整数n(1≤n,m≤10^18),分别表示粮仓的容量和每天早上加入的稻米数。 从第一天早上开始计天数(即第一天晚上会有鸟儿来吃)

输出粮仓第一次为空的那天

样例一: 5 2 样例二: 8 1

样例一: 4 样例二: 5

{% endfold %}

题解

手算一下,可以发现前m天,鸟吃的都刚好能被补上
而m天后,前m只鸟消耗每天的补给,剩下的鸟消耗仓库的存粮
因此计算 (1+t)*t/2 >= n 即可
解出最小的符合要求的 t 然后加上 m 就是答案

由于数据非常大,可以使用unsigned long long
解方程部分使用二分查找

n最大为1e18,解集取为1e10确保覆盖所有解


如果n<m,那么直接输出n

代码

{% fold 点击显/隐代码 %}```cpp lls和神话故事 https://github.com/OhYee/sourcecode/tree/master/ACM 代码备份
#include
#include
#include
using namespace std;
typedef unsigned long long LL;

LL n,m;

// (1+t)*t/2 >= m min(t)+m
int main(){

cin.sync_with_stdio(false);
cin.tie(0);

cin >> n >> m;
LL l=0,r=1e10;
LL t=0;
while(l<r){
    t = (l+r)/2;
    if(t*(t+1) >= (n-m)*2)
        r = t;
    else
        l = t + 1;
    // cout << l <<" " << r << endl;
}
cout << l + m << endl;
return 0;

}

{% endfold %}