拼多多4.18笔试题解

第1题

枚举菱形z的中点

def solve(x: int, y: int):
    cnt1 = sum((x - i) // 2 for i in range(x))
    cnt2 = sum((y - i) // 2 for i in range(y))
    return cnt1 * cnt2

第2题

暴力遍历交换的两个下标

def solve(pos: List[Tuple[int, int]]):
    # pos[i]: (xi, yi)
    pos.sort()
    (x, y), n = zip(*pos), len(pos)
    width = [0] * n
    for i in range(n):
        width[i] = x[min(i + 1, n - 1)] - x[max(i - 1, 0)]
    best, besti, bestj = 0, None, None
    for i in range(n):
        for j in range(i + 1, n):
            if (inc := (y[i] - y[j]) * (width[j] - width[i])) > best:
                best, besti, bestj = inc, i, j
    if best: print(x[besti], x[bestj])
    else: print(-1)

第3题

【4.19更新】想出来了,补充一下代码!

在M项配置中,遍历所有的配置项的可能组合,代码里面用一个M位的二进制数sel表示,例如sel = 0b01010代表尝试合并第1和第3项配置,然后剩下了一些未合并的配置组合,用nxt存储,再用函数递归处理。

from math import prod
from collections import defaultdict
# 输入
M = int(input())
cnt = []
for i in range(M):
    cnt.append(int(input().split()[0]))
T = int(input())
configs = defaultdict(list)
for _ in range(T):
    line = input().split()
    configs[int(line[-1])].append(line[:-1])

# 计算合并后的配置数量
def combine(cfgs):
    ret = float("inf")
    for sel in range(1 << M):
        # 将sel位为1的配置项合并(如果可以的话)
        d, ans, nxt = defaultdict(list), 0, []
        for idx, cfg in enumerate(cfgs):
            key = tuple(cfg[i] for i in range(M) if sel >> i & 1)
            d[key].append(idx)
        for key, idxs in d.items():
            # 只需check一下该配置项的数量是否等于所有可能的配置项数量
            if prod(cnt[i] for i in range(M) if not sel >> i & 1) == len(idxs):
                ans += 1
            else:
                nxt.extend(cfgs[idx] for idx in idxs)
        ans += len(nxt) if not ans else combine(nxt)
        ret = min(ret, ans)
    return ret

print(sum(combine(cfgs) for cfgs in configs.values()))

第4题

动态规划。剩偶数个金币时,如果拿掉一半还剩偶数个的话,就只拿一个(让对方只能拿一个),特殊的情况是剩4个的时候,应该拿一半

@cache
def solve(n):
    if n == 1: return 1
    if n == 4 or n & 3 == 2: 
        return n - solve(n >> 1)
    return n - solve(n - 1)

#拼多多##我的实习求职记录##23届找工作求助阵地#
全部评论
第二题为啥是两个差值相乘就是变化的面积呢?这个投影面积到底指的什么呢昨天题目没看懂
2 回复 分享
发布于 2023-04-19 02:20 浙江
更新了一下第3题的解法!
2 回复 分享
发布于 2023-04-19 16:46 北京
AC了3.15道,尽力了(还有一定运气成分)
1 回复 分享
发布于 2023-04-19 10:42 上海
第三题写的什么玩意?
1 回复 分享
发布于 2023-04-19 10:57 山东
清华佬怎么能做到这么简洁的
点赞 回复 分享
发布于 2023-04-18 22:20 江苏
第四题妙啊
点赞 回复 分享
发布于 2023-04-18 22:48 广东
大佬太强了
点赞 回复 分享
发布于 2023-04-18 22:52 四川
跪了
点赞 回复 分享
发布于 2023-04-18 23:01 陕西
第三题有会写的吗
点赞 回复 分享
发布于 2023-04-19 09:56 浙江
阿里数字供应链部门刚开始春招,欢迎同学踊跃报表。查看个人首页帖子 查看部门介绍和扫码线上投递简历。 https://www.nowcoder.com/discuss/472422701500485632
点赞 回复 分享
发布于 2023-04-19 16:44 浙江
阿里数字供应链部门刚开始春招,欢迎同学踊跃报表。查看个人首页帖子 查看部门介绍和扫码线上投递简历。 https://www.nowcoder.com/discuss/472422701500485632
点赞 回复 分享
发布于 2023-04-19 19:51 浙江

相关推荐

2024-12-25 21:46
哈尔滨工程大学 Java
211本,java还是golang,目前学了三个月java,但基本集中在刷算法题和背八股上面,都学可以吗,到时候比较一下offer,这可以实现吗,难度大不大#我的2024牛客高光时刻##你都收到了哪些公司的感谢信?##牛客创作赏金赛##如何写一份好简历##985本硕1个中小厂offer,摆烂or继续努力##牛客创作赏金赛##如何看待offer收割机的行为##选完offer后,你后悔学机械吗?##0offer互助地##秋招的第一个offer,大家都拿到了吗#
黑皮白袜臭脚体育生:本2可以go,进中大厂的门槛达到了,go基本只有中大厂有岗位,可以先只学Java,中大厂go很多接受java转过去的另外宣传下自己的开源仿b站微服务项目,GitHub已经390star,牛客上有完整文档教程,如果觉得有帮助的话可以点个小星星,蟹蟹
投递牛客等公司8个岗位 >
点赞 评论 收藏
分享
2024-11-18 13:45
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
安静的仰泳鲈鱼sp到手了:你这比赛获奖和实习,跟你的技术栈有半点关系吗😮
点赞 评论 收藏
分享
评论
7
26
分享
牛客网
牛客企业服务