8.6 文远知行 笔试

2小时,3道编程题,还是挺有难度的。

编程题:

  • 第一题

题意:有n组数据,每组数据给出m,j,k,表示参加比赛的人数(m=2的幂次,m<=2000)、观众想看的2个人的分数排名。接着给出m个人的比赛顺序(每轮比赛两两进行,分数高的人获胜,直到最后诞生冠军),m个人的分数。如果在所有比赛中,分数排第j的人和分数排第k的人进行了比赛,输出YES,否则输出NO。

题解:用队列按题意模拟即可。

  • 第二题

题意:给出s串、t串和正整数k(len(s)<2e5,len(t)<10,k<2e9)。求s中有多少子序列等于t,同时满足子序列中所有相邻字符的距离≤k,对1e9+7取模。

样例:

  • 输入:soovood svd 2 输出:1(s和v的距离为2)
  • 输入:soovood svd 1 输出:0

题解:dp[i][j]表示,子序列结尾为t[i],尾部间隔为j的子序列数量,转移更新公式如下。在遍历s串时,假如当前字符c==t[i],则使用第一条更新公式;每遍历一个字符,之前子序列的间隔就会增加1,使用第二条更新公式。

  dp[i][0] = sum(dp[i-1][0].......dp[i-1][k])

  dp[i-1][j+1] = dp[i-1][j]

为了维护第一种转移,需要区间求和和单点修改,可以使用线段树或树状数组。为了维护第二种转移,需要对dp数组进行滑动处理。总复杂度为O(2e5*10*log)。

  • 第三题

题意:给出n,m,k(均为≤1e6的正整数)。在二维坐标系上,有(1,1)到(n,m)这n*m个点,每个点权值为横坐标与纵坐标的乘积。求所有点的权值中第k大的值。

题解:二分答案。枚举横坐标的值,除法得到纵坐标的范围,进而得到比当前mid大的值有多少。复杂度为O(n*log)。

#笔试##文远知行#
全部评论
大佬强啊
1 回复 分享
发布于 2023-08-06 21:03 福建
第二题直接dp,好像不需要其他数据结构,如果s[i]!= t[j], dp[i][j]=dp[i-1][j], 如果相等,dp[i][j]=dp[i-1][j-1] - dp[i-k-2][j-1] + dp [i-1][ j]
1 回复 分享
发布于 2023-08-06 21:24 北京
第一题的话感觉不难但是就是0%
1 回复 分享
发布于 2023-08-06 22:41 上海
老哥能发下代码不,学习一下
点赞 回复 分享
发布于 2023-08-06 21:07 上海
我用的是暴力回溯,但是只ac了12.5%
点赞 回复 分享
发布于 2023-08-06 22:40 上海
膜大佬
点赞 回复 分享
发布于 2023-08-06 23:32 北京
试试荣耀吧,秋招刚刚启动,多一个选择,多一个机会https://www.nowcoder.com/share/jump/992486249831419381
点赞 回复 分享
发布于 2023-08-07 08:24 江苏
老哥投的是什么岗位,为啥我没有笔试就约面了
点赞 回复 分享
发布于 2023-08-08 10:31 北京

相关推荐

不愿透露姓名的神秘牛友
11-01 21:30
点赞 评论 收藏
分享
8 48 评论
分享
牛客网
牛客企业服务