hihoCoder #1498 : Diligent Robots【数学】
2024-10-12 03:49:39
#1498 : Diligent Robots
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
There are N jobs to be finished. It takes a robot 1 hour to finish one job.
At the beginning you have only one robot. Luckily a robot may build more robots identical to itself. It takes a robot Q hours to build another robot.
So what is the minimum number of hours to finish N jobs?
Note two or more robots working on the same job or building the same robot won't accelerate the progress.
输入
The first line contains 2 integers, N and Q.
For 70% of the data, 1 <= N <= 1000000
For 100% of the data, 1 <= N <= 1000000000000, 1 <= Q <= 1000
输出
The minimum number of hours.
- 样例输入
-
10 1
- 样例输出
-
5
思路分析
首先,如果要复制机器,就要尽早复制,因为尽早复制可以尽早投入生产。
我的纠结点在于,复制的最后一轮,会不会有一部分机器人在复制,其他机器人在工作?
通过严谨的证明说明是不会的。
以下证明过程参考一位大神的,很严谨的证明,I love it!QAQ
因为我上面的证明里得到了“T>2qm”这个临界条件,因此在代码里可以直接使用。详解代码中已给出!
下面给出AC代码:
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int main()
{
ll n,q;
cin>>n>>q;//n表示任务总数,q表示生产一次机器人需要的时间
ll m=,r=;//m表示初始时机器人的数量,r表示生产次数
while(n>*m*q)//根据结论,机器人应当全部复制
{
m<<=;//倍增操作
r++;
}
ll t=q*r+n/m;//总时间为生产机器人所花费的时间q*r+任务数与机器人的比值(每个机器人单位时间生产单位价值的产品)
if(n%m)//不能整除的话说明t++;
t++;
cout<<t<<endl;
return ;
}
最新文章
- logstash file输入,无输出原因与解决办法
- OpenCASCADE View Manipulator
- SPSS数据分析—广义估计方程
- Android提升篇系列:Android项目代码优化实践
- JavaScript学习笔记-正则表达式(语法篇)
- json对象转换为json字符串
- windows系统常用快捷键及其作用
- 邻接表c源码(构造邻接矩阵,深度优先遍历,广度优先遍历,最小生成树prim,kruskal算法)
- 以前5年只专注于.net,现今开始学习java.
- 掌握下面常用函数,学php不再难
- jQuery中事件对象e的事件冒泡用法示例(事件冒泡与阻止冒泡)
- Day11 空时编码理论之正交空时分组码和垂直分层空时编码
- [LeetCode] Masking Personal Information 给个人信息打码
- 【Dojo 1.x】笔记7 配置对象dojoConfig的内容1:has属性、加载器的属性
- 2017NOIP游记
- JDBC-day02
- 20155210 潘滢昊2016-2017-2 《Java程序设计》第9周学习总结
- Miller-Rabin素数测试算法(POJ1811Prime Test)
- JS 返回上一页并刷新,但不用重新加载整个页面(ajax实现)
- CPictureEx类