百度3月7笔试题求解

就是黑白魔法这题,输入一个n代表n次魔法,之后输入n个非零数字代表每次释放的魔法,其中对于一段连续释放魔法累乘结果若为负数就是一次黑魔法,反之是一次白魔法,问最后一共能释放多少种不同的黑魔法以及白魔法,不同指的就是不同段连续释放组成的结果。这题难道不是就对每一个子串求一次累乘就行了嘛,还有啥特殊情况呢,只过了27%。

以下是核心代码块,m就是那一组释放的魔法的一个list,a代表黑魔法的次数,b代表白魔法的次数。

for i in range(len(m)):
    t = 1
    for j in range(i, len(m)):
        t *= m[j]
        if t < 0:
            a += 1
        else:
            b += 1

#笔试##百度#
全部评论
我AC了,就整个长度n的列表,每位记录以当前位为end的白魔法和黑魔法数。假设list[n] = [white,black],那我们读到n+1位的时候,如果是正数,那黑魔法的方案数会多list[n][1]种,白魔法的方案数会多list[n][0]+1种(因为会多只有第n+1本身的这种情况),是负数的话反过来,遍历一次以后把列表每个元素的[0]和[1]相加输出就ok啦,dp问题
3
送花
回复
分享
发布于 2023-03-07 23:14 日本
我用的回溯,只有82%
2
送花
回复
分享
发布于 2023-03-07 21:03 四川
滴滴
校招火热招聘中
官网直投
可以看下我的题解
2
送花
回复
分享
发布于 2023-03-07 22:03 安徽
超时不会提醒吗
1
送花
回复
分享
发布于 2023-03-07 20:59 上海
借楼问有没有做A卷的佬,其他踢没A但至少有思路,第一题子序列拆分一点思路都没😥
1
送花
回复
分享
发布于 2023-03-07 21:29 浙江
n = int(input()) num = list(map(int, input().split())) l = len(num) count = [0, 0] # 存储白,黑的个数 if num[0] > 0: count[0] = 1 else: count[1] = 1 res_0, res_1 = count[0], count[1] for i in range(1, l): if num[i] > 0: count[0], count[1] = count[0] + 1, count[1] else: count[0], count[1] = count[1], count[0] +1 res_0 += count[0] res_1 += count[1] print(res_1, res_0) ac了,可以看作指针滑动,以当前指针所指元素为尾考虑的话,很类似双指针滑动那道题。 就出现了状态转移公式,对应在代码里,自己看吧
1
送花
回复
分享
发布于 2023-03-09 01:01 湖北
有的用例超时了吧
点赞
送花
回复
分享
发布于 2023-03-07 20:57 山东
第一超时,第二t=m[i]
点赞
送花
回复
分享
发布于 2023-03-07 21:03 河南
(不同指的就是不同段连续释放组成的结果) 这句话应该代表最后释放的魔法序列不同 比如 [-1, 1, -1] 可以分成 一、[-1] [1, -1] 魔法序列就是(黑, 黑) 二、[-1, 1] [-1] 魔法序列也是(黑,黑) 这两种算作一种方案数
点赞
送花
回复
分享
发布于 2023-03-07 21:03 河南
你这肯定超时啊,动态规划不就行了
点赞
送花
回复
分享
发布于 2023-03-07 21:04 北京
欸我去你们一说超时那还真是,问题是他也不提醒我也没想到是超时了
点赞
送花
回复
分享
发布于 2023-03-07 21:07 河北
蹲,用的dp复杂度On, 也只过27
点赞
送花
回复
分享
发布于 2023-03-07 21:09 江西
怀疑是不是python语言有问题啊On了只过27%
点赞
送花
回复
分享
发布于 2023-03-07 21:25 北京
动态规划。 l = [1,-1,1,-1,1] 一维转移方程:dp[i] = l[i]*dp[i-1], dp[i]表示用i个连续时的乘积;两次循环,小循环从后面开始,每大循环计算一次当前dp中正负数,最后求和; 二维转移方差:dp[i][j] = l[i]*dp[i-1][j-1],dp[i][j]表示每次l中第i位置的数和其余与之连续的j-1个数的乘积,最后直接计算二维矩阵的正负个数; 27%可能是超时,82%应该是没用1,-1代替,导致数据超了
点赞
送花
回复
分享
发布于 2023-03-07 22:35 四川
m[i] 的范围在-10^9到10^9之间,如果你每次都乘m[i]那你的t值会非常巨大
点赞
送花
回复
分享
发布于 2023-03-07 23:28 德国
这样一直乘是不是会爆了。。
点赞
送花
回复
分享
发布于 2023-03-07 23:59 日本
黑魔法是DP,难度都不高
点赞
送花
回复
分享
发布于 2023-03-08 16:52 山西
楼主,这是春招吗
点赞
送花
回复
分享
发布于 2023-03-09 10:11 北京
请问笔试一共是三道编程题吗?
点赞
送花
回复
分享
发布于 2023-03-10 15:38 四川
百度的笔试是在牛客网上的吗?可以用本地ide吗
点赞
送花
回复
分享
发布于 2023-03-12 14:01 黑龙江

相关推荐

11 15 评论
分享
牛客网
牛客企业服务