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

相关推荐

2025-12-02 02:15
门头沟学院
最近菊厂陆续开了,极力劝退那些拿13级的985硕士,就13级那么点儿薪资,一线城市每个月到手1.8/7/6w,租房2k还是破烂,吃饭2k还是预制菜,买个1k衣服都是聚酯纤维破塑料,稍微出去浪一浪,能留1w就是万岁,要是再有个啥都想买的对象,一线工作一年难存10w。隔壁工地混泥土,钳工,焊工一天800+,还包吃包住。读书18年到985硕士出来就为了进厂螺丝工?还不如从8岁童工开始干活,别人读书完了你工龄18+,混不上领导也是个小头头了。当然专科进来正式工,od都行,一般本科进来13级也OK,毕竟22岁年纪摆在那个地方还不需要太花钱。读硕博的基本26岁,工作两年就要结婚的,兜里没几个崽,连彩礼都要信用贷。菊厂离职的不少,毕竟正常没人受得了9116(梗:再来一次911刷6)。为啥这时候劝?因为刚下班,因为国考刚完,省考下周,就是可惜选调只有当年应届能报。现在回想能拍断大腿。应届生真实好身份,错过这一次,选调,考公,考编,当老师,进医院,研究所,高校,央国企,基本都无缘了,就连报名资格都被剥夺了,可谓是被党和国家遗弃的废材,统称“社会上的”,扔到社会去流浪,被用坏了就扔医院,长期超负载使用,零件修不好基本可以扔火里回炉重造了。体制内奉行找体制内的,都是党和国家选的人才,智力不差,样貌不丑,身材端正,收入稳定,安居房政策福利待遇也OK。因公出行都是报销,周末顺带“游山玩水“,这种体制内单身资源但凡想找对象,去社会上随便吆喝一声都排队。观察一下,基本没什么公务员在相亲,因为早就被邻里邻居抢光了。
哈哈哈,你是老六:就这不去的人大把人干呢,现在不缺人干活,你不干大把干呢,还有那个说农民工赚钱的,那个800+我估计肯定也就那一段时间,哪有这么赚钱,还是一句话,要想存下钱必须花销极低,能省的就不花钱,工资要高点
点赞 评论 收藏
分享
明天不下雨了:这个项目 这个简历 这个模板 莫不是一个开源的
点赞 评论 收藏
分享
昨天 22:57
武汉大学 Java
点赞 评论 收藏
分享
评论
7
26
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务