微软2017年预科生计划在线编程笔试第二场-#1498 : Diligent Robots

http://hihocoder.com/problemset/problem/1498

题意理解:要制作机器人,一定是集中在前面先做,然后再生产;然后枚举前面几个Q小时生产机器人,因为是2的指数,40天之内一定能达到1e12以上,所以大于40个Q就不用枚举了。枚举完之后,假设后面紧接的一个Q还有部分机器人在制作机器人,设为x,这种情况用数学推,或者假设都开始干活,不做机器人了,这种情况直接算。数学推的过程见图片:


急转弯:先要枚举前面完整的Q的倍数,然后用数学解一下下一个Q内几个机器人生产机器人更好

算法:无

数据结构:无,用到了ceil(5/2) = 3这样的技巧,在c++中经常ceil(A/B) = (A + B - 1) / A  python中需要用//



from __future__ import print_function
#
#

'test for python'

__author__ = 'hjkruclion'

import os
import sys

def read_int():
    """Read a seris of numbers."""
    return list(map(int, sys.stdin.readline().split()))

N, Q = read_int()
# print(N)
t = N
for n in range(41):
    A = int(pow(2, n) + 0.1)
    t = min(t, (N + A - 1) // A + n * Q)
    t = min(t, Q + (N - 2 * Q * A + (A + 1 - 1)) // (A + 1) + n * Q + Q)
    t = min(t, Q + (N - 2 * Q * A + (A + A - 1)) // (A + A) + n * Q + Q)
print(t)






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值