04.24 腾讯笔试-技术研究

# 第一题 33% ,取每次钱最多的方式没想对,有问题
def find_max(n, p):
    # l, r = 0, int(1e7)
    # while l < r:
    #     mid = (l + r) >> 1
    #     if (1 - p) * (n + mid) - n < 0:
    #         l = mid + 1
    #     else:
    #         r = mid - 1
    # return r
    tmp = n / (1 - p) - n
    return tmp - 1

n, m = list(map(int, input().split()))
benjin = n
nums = list(map(float, input().split()))
money = 0
for p in nums:
    cur = find_max(benjin, p)
    money += cur
    benjin += cur
print(int(money + n))
# 第二题 40%  我算的方式错了吗?
c = int(input())
nums = list(map(float, input().split()))
matrix = []
result = [0] * c
for _ in range(c):
    row = list(map(float, input().split()))
    matrix.append(row)
for col in range(c):
    sum_ = 0
    for i in range(c):
        sum_ += nums[i] * matrix[i][col]
    result[col] = sum_
max_index = -1
max_value = float('-inf')
for i, num in enumerate(result):
    if num > max_value:
        max_value = num
        max_index = i
print(max_index)
# 第三题  AC
q = int(input())
Max = 1000
for _ in range(q):
    nums = list(map(int, input().split()))
    a, b, c = nums
    l, r = 0, Max
    while l <= r:
        mid = (l + r) / 2
        result = pow(mid, 3) + a * mid * mid + b * mid - c
        if abs(result) <= 1e-7:
            print(mid)
            break
        elif result > 0:
            r = mid - 0.00000001
        else:
            l = mid + 0.00000001
    if l > r:
        print(mid)
# 第四题 AC
def belong(l, r):
    result = 0
    for num in nums_red:
        if num > r: break
        if l <= num <= r:
            result += 1
    for num in nums_blue:
        if num > r: break
        if l <= num <= r:
            result -= 1
    return result

n, m = list(map(int, input().split()))
nums_red = list(map(int, input().split()))
nums_red.sort()
nums_blue = list(map(int, input().split()))
nums_blue.sort()
first, second, third = 0, 0, 0
q = int(input())
for _ in range(q):
    l, r = list(map(int, input().split()))
    tmp = belong(l, r)
    if tmp == 0:
        second += 1
    elif tmp > 0:
        first += 1
    else:
        third += 1
print(first, second, third)
#笔试题目##笔试时间#
全部评论
第四题数据水了吧,感觉按数据范围这样写肯定超时啊
2 回复 分享
发布于 2022-04-25 00:05
感谢分享
1 回复 分享
发布于 2022-04-24 22:28
第一题取最大值的方程:(当前奖池金额 + x)* p - x = 0。
点赞 回复 分享
发布于 2022-04-25 13:34
第二题跟我一样,应该是矩阵的行和列反了...
点赞 回复 分享
发布于 2022-04-25 10:43

相关推荐

03-29 14:19
门头沟学院 Java
你背过凌晨4点的八股文么:加油同学,人生的容错率很高,只是一个暑期罢了,后面还有很多机会!
点赞 评论 收藏
分享
评论
5
18
分享

创作者周榜

更多
牛客网
牛客企业服务