京东第四批笔试Python版

感谢东子,第一次笔试ak,前两题代码没存

第一题 

没啥好说的,区间排个序判一下是否相交即可,选的两个数一定是一样的,第一次交的时候过了70,想了想发现是没判第一个和第三个区间,改了后过了

第二题 

二分每个商品价格最接近的折扣劵即可,不知道折扣的数据是不是非递减的,但我还是把排序后的每一个折扣的满减线与前一个满减线的折扣取了个max,防止满1000元减5元,满100元-50元的情况出现

# 回忆版
def solve():
    n, m = map(int, input().split())
    a = list(map(int, input().split()))
    s = []
    for i in range(m):
        s.append(list(map(int, input().split())))
    s.sort()
    for i in range(1, m):
        s[i][1] = max(s[i][1], s[i - 1][1])
    d = defaultdict(int)
    for i in s:
        d[i[0]] = i[1]
    ans = 0
    temp = sorted(i[0] for i in s)
    for i in range(n):
        pos = bisect_right(temp, a[i])
        if pos == 0:
            ans += a[i]
        else:
            ans += a[i] - d[temp[pos - 1]]
    print(ans)

第三题 

基础不牢,地动山摇。看数据范围一眼O(mnlog(min(m, n)), 应该是需要个二分,想了一个多小时怎么在二维数组里面二分,忘了,半天没想出来,最后半小时决定先把骗分的写上,快速敲完发现py写O(mn * min(n, m))能过26,后来又交了遍过了23(评测机还是一如既往的抖,不过也有可能是py的锅),正当我打算换python3并且加一点读入优化交一遍的时候,发现把最后一层循环起始点(正方形的边长)换成n // 2能过93,大惊,又试着卡了卡数据,就。。。全过了。。数据太弱了,你还我一个多小时的光阴

def solve():
    n, m = map(int, input().split())
    a = []
    for i in range(n):
        a.append(list(map(int, input().split())))

    s = [[0] * (m + 1) for _ in range(n + 1)]

    # 按主对角线编号,以(1,m)为第1号,每个格子属于第abs(i - 1) + abs(j - m) + 1号
    for i in range(1, n + 1):
        for j in range(1, m + 1):
            s[i][j] = s[i][j - 1] + a[i - 1][j - 1]

    for i in range(1, n + 1):
        for j in range(1, m + 1):
            s[i][j] += s[i - 1][j]
    tot = s[n][m]
    # for i in range(n + 1):
    #     print(*s[i])
    ans = 1 << 64
    for i in range(1, n + 1):
        for j in range(1, m + 1):
            for k in range(max(m // 2 - 10, 0), min((n - i), (m - j)) + 1):
                ii = i + k
                jj = j + k
                if k == 0:
                    ans = min(ans, abs(a[i - 1][j - 1] - (tot - a[i - 1][j - 1])))
                    continue
                res = s[ii][jj] - s[ii][j - 1] - s[i - 1][jj] + s[i - 1][j - 1]
                ans = min(ans, abs(res - (tot - res)))
    print(ans)
solve()


注释是原来的思路,想了半天没想出好的处理方式

#我的求职思考#
全部评论
怎么 我n方的复杂度的还只能过10呢 虽然常数大了一点
点赞 回复 分享
发布于 2023-09-02 16:49 上海
第二题系统炸了,一直在转圈无法提交😅
点赞 回复 分享
发布于 2023-09-02 14:18 广东
半年没写过题了,看了别人的正解发现自己还是太菜了
点赞 回复 分享
发布于 2023-09-02 14:16 上海

相关推荐

昨天 19:00
门头沟学院 golang
点赞 评论 收藏
分享
家人们,我现在真的好纠结。我是26届的,目前还没有实习过。我现在的情况是,想参加秋招,但是感觉自己的简历特别空,没有实习经历会不会秋招直接凉凉啊?可我又听说现在很多公司对26届实习生也不太感冒,说什么不确定性大。而且我最近在准备考公,时间上也有点冲突。要是把时间花在实习上,备考时间就少了。但要是不实习,又怕以后就业有问题😫有没有懂行的友友帮我分析分析:26届现在不实习,秋招找工作真的会很难吗?考公和实习该怎么平衡啊?如果现在不实习,考完公再去找实习还来得及吗?真的太焦虑了,希望大家能给我点建议🙏
小破站_程序员YT:我可能和大家的观点不一样。人的精力是有限的,不能既要还要。你又想实习又想考公最后又要秋招上岸,我觉得哪有那么多的选择。你如果想考上岸,那就全力以赴。如果想秋招上岸,就继续投实习,投没了,就继续准备秋招,秋招不行继续春招。别到最后,考公没上岸,觉得是花了时间浪费在找实习上了, 秋招没上岸,觉得是浪费时间准备考公去了。我是认为很难说可以去平衡 不喜勿喷,可以叫我删除
点赞 评论 收藏
分享
缒梦&独舞:这家公司是这样的,去年给我实习offer了,不过也是面着玩儿的,他周六还要去做公益志愿活动
点赞 评论 收藏
分享
强大的马里奥:不太可能,我校计算机硕士就业率99%
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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