您的位置:首页 > 编程语言

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

2017-09-10 23:01 405 查看
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)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 微软 编程