腾讯笔试 8.23 python

第一题 括号匹配不会
第二题 求积分 这题目***在于需要取小数点6,卡了我半个小时 100
import math
def solution(A,B,C,D):
    ans = (1/3)*A*(D**3-C**3) + 0.5*(D**2-C**2)+B*(D-C)
    return ans

n = int(input())
for _ in range(n):
    a,b,c,d = list(map(int,input().split()))
    ans = abs(solution(a,b,c,d))
    print("%.6f"%ans)
第三题 选队长 n*2**(n-1) 100
n = int(input())

mod = 10 ** 9 + 7


def cal(x, n, p):
    res = 1
    while n > 0:
        if n % 2:
            res = res * x % p
        x = x * x % p
        n = n//2
    return res


ans = n * cal(2, n - 1, mod)
ans = ans % mod
print(ans)
第四题  图中配对问题 90
from collections import defaultdict

n, m = list(map(int, input().split()))
A = []
for i in range(m):
    A.append(input().split())
dp = defaultdict(list)

for x, y in A:
    dp[x].append(y)
    dp[y].append(x)

# print(dp)

mem = defaultdict(list)
for k, v in dp.items():
    new_k = ''.join(sorted(v))
    mem[new_k].append(k)

ans = 0
for k, v in mem.items():
    n = len(v)
    if n > 1:
        ans += n*(n-1)/2
print(int(ans))
第五题 没时间做了 赛后做了一下,不知道对不对
from collections import defaultdict
A = defaultdict(list)
B = defaultdict(list)
n,m,k = list(map(int,input().split()))
for _ in range(m):
    x,y,_ = list(map(int,input().split()))
    A[x].append(y)
    A[y].append(x)
for _ in range(k):
    x, y = list(map(int, input().split()))
    B[x].append(y)
ans = float('inf')
dp = [ans]*(n+1)
dp[1] = 0
for i in range(100):
    for k,v in B.items():
        for j in v:
            dp[j] = min(dp[j], dp[k])
    for k, v in A.items():
        for j in v:
            dp[j] = min(dp[j], dp[k] + 1)
print(dp[n])




#笔试题目##腾讯#
全部评论
为什么round是不通过我怀疑是python的问题,大家有兴趣可以查一下,因为我之前笔试吃过round亏,所以用的format格式化.
1 回复 分享
发布于 2020-08-23 22:45
我觉得第二题如果用定积分来做的话,应该是  ∫|y|dx 积分区间是[C,D],我看你们都忽略了绝对值,这样算出来都是正确的吗?可能我想的有错误。。。
1 回复 分享
发布于 2020-08-24 13:26
第三题 n*(2**(n-1))%(10**9+7)直接输出只a了80%,剩余的超时了,绝了😂
点赞 回复 分享
发布于 2020-08-23 22:27
你第二题通过了?每输入一组数据都要打印输出?题目好像说保留4位小数精度就算通过吧?没要求输出6位小数吧?我是这样的通过0%...... n = int(input()) data = [] for _ in range(n):     data.append(list(map(int, input().split()))) def func(x, a, b):     return a * x ** 3 / 3 + x ** 2 / 2 + b * x for i in range(n):     a, b, c, d = data[i]     res = func(d, a, b) - func(c, a, b)     print(round(res, 6))
点赞 回复 分享
发布于 2020-08-23 22:29
我用round保留的六位一个都没过。。。。
点赞 回复 分享
发布于 2020-08-23 22:31
woc,为什么同样的思路,我的0%?代码如下: import sys if __name__=='__main__&(688)#39;:     for line in sys.stdin:         T = int(line.strip())         for _ in range(T):             A, B, C, D = map(int, sys.stdin.readline().split())             DMC, DPC = D - C, D + C             area = DMC * (DPC**2 - D*C) * A / 3 + DMC * DPC / 2 + B * DMC             # area = A * (D**3 - C**3) / 3 + (D**2 - C**2) / 2 + B * (D-C)             print(round(abs(area), 6))
点赞 回复 分享
发布于 2020-08-23 22:35
楼主可以解释一下第四题为什么ans += n*(n-1)/2吗~谢谢!
点赞 回复 分享
发布于 2020-08-24 02:42
楼主,第三题选队长算法可以简单讲解下么,谢谢
点赞 回复 分享
发布于 2020-08-24 15:12
牛客网里面到底什么包能import什么不能呀😥有时候import就显示没有
点赞 回复 分享
发布于 2020-08-25 19:04
关于求积分的,之前考了腾讯实习生,当时的积分题是求抛物线和直线围成的面积的,这样就没法直接反算积分公式了吧,对于这种复杂的求积分,楼主有什么解决方法吗?
点赞 回复 分享
发布于 2020-08-25 19:15
m
点赞 回复 分享
发布于 2020-09-07 01:19

相关推荐

6 28 评论
分享
牛客网
牛客企业服务