拼多多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 浙江

相关推荐

联通 技术人员 总包不低于12
点赞 评论 收藏
分享
头像
11-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
想润的芹菜人狠话不多:把其中一个老总放中间都会得罪另一个
点赞 评论 收藏
分享
7 26 评论
分享
牛客网
牛客企业服务