3.24拼多多算法笔试(pdd)

Q1

这里有n个正整数,a1,....,an

Alice 会先去掉其中最多d 个数

Bob 接下来会将剩余的数中最多m个数乘以 -k

Alice 想要剩余数之和尽可能大,Bob 想要剩余数之和尽可能小。假设 Alice 和 Bob 都足够聪明,请问最后剩余数之和是多少。

输入描述

第一行一个正整数T,接下来有T组数据

每组数据2行

第一行4 个数

n, m, k, d (2 ≤ n ≤ 10^5) (0 ≤ m, d ≤ n) (1 ≤ k < 10^4)

第二行n个数,a1,a2,..., an (1 ≤ ai ≤ 10^9)

保证sigma n不超过10^5

输出描述

每组数据输出一行,每行一个数,表示剩余数之和

A1

排序,滑动窗口解决,为啥有滑动窗口这个结论是因为有一个单调性:Alice和Bob都倾向选大端的数!

import sys

t = int(input())
for i in range(t):
    n,m,k,d = map(int,input().split())
    nums = list(map(int,input().split()))
    nums.sort(key=lambda x:-x)
    tmp = -k*sum(nums[:m])+sum(nums[m:])
    res = tmp
    for i,num in enumerate(nums):
        if i>=d:
            break
        tmp+=k*nums[i]
        tmp-=(k+1)*nums[i+m] if i+m<n else 0
        res = max(res,tmp)
    print(res)

Q2

伊文有两个由0和1组成的字符串,A和B,长度分别为m和n(m>=n)。伊文希望取出A的连续子串与B构造若干长度为n的S串,满足:

  • 

伊文想知道总共能够构造出多少个不同的S串。

输入描述

输入有三行,第一行2个数m和n,为A和B的长度;

m,n (0 <n≤m≤5 x10^3)

第二行为长度为m的A串

第三行为长度为 的B串,A和B仅由'0'和'1'组成

输出描述

输出:一个数字,代表不同的S串个数

A2

签到题在第二题,这个数据量级直接暴力了

import sys

m,n = map(int,input().split())
a = input()
b = input()

def xor(s1,s2):
    res = ""
    cnt = 0
    for a,b in zip(s1,s2):
        if (a=='1' and b=='0') or (b=='1' and a=='0'):
            res+='1'
            cnt^=1
        else:
            res+='0'
            cnt^=0
    return cnt,res

s = set()
for i in range(m-n+1):
    cnt,res = xor(a[i:i+n],b)
    if cnt:
        continue
    if res not in s:
        s.add(res)
print(len(s))

Q3

多多快递站共有n个快递点,n个快递点之间通过m条单向车道连接。快递员从任何一个快递站点出发,都无法通过单向车道回到该站点。也就是说,n个快递点组成一张有向无环图。对于快递点u,如果对于所有的快递点v(u != w),快递员都可以从w走到v,或者从v走到u,那么则评定站点u为超级快递点。

请你帮忙算一算,一共有多少个超级快递点。

输入描述

第一行2个数字n(2≤n≤3*10^5),m(1≤m ≤3*10^5),n为快递点个数,m为单向车道个数。

接下来的m行每行两个数字u,v (1<=u,v<=n,u!=v),表示有一条站点么指向0的单向车道。

输出描述

请输出1个数字,表示超级快递点的个数。

A3

DFS暴力ac不了不献丑了

Q4

多多有一个长度为n的字符串,这个字符串由26个小写字母组成.

多多可以对这个字符串进行多次操作,每次操作可以把该字符串中一段连续的回文子串删除(单个字符也属于回文串),删除后剩下的串会拼在一起.

请问最少需要多少次操作可以将这个字符串删光.

输入描述

第一行,包含一个正整数T(1≤T≤20)代表测试数据的组数.

对于每组测试数据,仅有一行,代表这个字符串.(1≤n≤ 500)

保证\sigma n 不超过3000

输出描述

对于每组数据输出一行整数,代表多多在进行最少多少次操作后,可以将这个字符串删光.

A4

dp[i][j]代表最小操作数,从小到大枚举区间,并枚举区间分割点。

import sys

t = int(input())
for i in range(t):
    s = input()
    n = len(s)
    dp = [[n]*n for _ in range(n)]
    for i in range(n):
        dp[i][i] = 1
    for k in range(1, n):
      for j in range(0,n-k):
        if s[j] == s[j+k]:
          if k == 1:
            dp[j][j+k] = 1
          else:
            dp[j][j+k] = dp[j+1][j+k-1]
        for i in range(j, j+k):
          dp[j][j+k] = min(dp[j][j+k], dp[j][i] + dp[i+1][j+k])
    print(dp[0][n-1])
#暑期实习##笔试##我的实习求职记录#
全部评论
大佬,这种笔试题去哪刷呀? 我只刷过leetcode,这种笔试题完全不会。
点赞 回复
分享
发布于 03-25 10:00 吉林
请问第二题的cnt起什么作用?
点赞 回复
分享
发布于 04-07 16:45 美国
滴滴
校招火热招聘中
官网直投

相关推荐

#拼多多##推荐算法面经##暑期实习####&nbsp;一面&nbsp;-&nbsp;时间:2024-04-01&nbsp;总计30分钟-&nbsp;自我介绍-&nbsp;本科推荐系统项目(项目细节问的比较多,基于项目展开考察八股,细节可以参考我的美团一面和快手一面面经,内容差不多)-&nbsp;介绍pointwise-loss、pairwise-loss、listwise-loss-&nbsp;BPR损失-&nbsp;特征重要性评估方法&nbsp;&nbsp;-&nbsp;排列重要性:随机打乱某一维特征的取值,测试模型性能下降。原理可以理解为使用随机,将该特征变为噪声。若打乱后模型性能下降较大,说明比较重要。&nbsp;&nbsp;-&nbsp;内置特征重要性:有些模型本身可以输出特征重要性分数,如LR和树模型&nbsp;&nbsp;-&nbsp;Leave-one-out:直接迭代的删除某一维特征,测试模型性能&nbsp;&nbsp;-&nbsp;相关性分析:分析特征与目标之间的相关性。同理,若特征随机化,则其与目标没什么关系。&nbsp;&nbsp;-&nbsp;递归特征消除:不断减小特征集,每次删除会导致更大下降的特征&nbsp;&nbsp;-&nbsp;XGBoost特征重要性:某特征在不同划分中得到的增益均值/使用次数&nbsp;&nbsp;-&nbsp;主成分分析PCA-&nbsp;论文-&nbsp;手撕:lc55&nbsp;跳跃游戏。给定一个非负整数*数组*&nbsp;nums&nbsp;,你最初位于数组的&nbsp;第一个下标&nbsp;。&nbsp;数组中的每个元素代表你在该位置可以*跳跃*的最大长度。&nbsp;判断你是否能够到达最后一个下标。-&nbsp;反问环节&nbsp;&nbsp;-&nbsp;项目规模&nbsp;&nbsp;-&nbsp;落地业务&nbsp;&nbsp;-&nbsp;我对该岗位来说,还有哪些需要提升和学习的?套评价,分析面试官反馈:项目实践比较丰富。后面可以多学习一些偏业界实际在用的方向,召回、精排、重排等文献、以及序列建模这一块,组里面也再做这一块。感觉面得还行,手撕两分钟写完,希望不是kpi,许愿二面。=====2024.4.3更新======约二面了,04-11&nbsp;16:00&nbsp;周四
点赞 评论 收藏
转发
点赞 评论 收藏
转发
6 18 评论
分享
牛客网
牛客企业服务