当前位置:   article > 正文

0528 小红书实习笔试真题 答案及解析_小红在小红书上发布n篇笔记,其中第i篇笔记的点赞数是ai,小红观察到,每隔一段时间

小红在小红书上发布n篇笔记,其中第i篇笔记的点赞数是ai,小红观察到,每隔一段时间

第一题 小苯的文章浏览

小苯是小红书的忠实用户之一。

这天,在“小红书app”发了一篇文章后,收获了若干浏览量。但其中有人浏览了多次,小苯现在想知道所有人第一次浏览的先后顺序,请你帮帮他吧。

输入描述

输入包含n+1行。

第一行一个正整数n(),表示小苯拿到的浏览记录的记录条数。

接下来每行一个字符串s (长度在20)以内,表示id为s的用户此时浏览了一次小苯的文章。

输出描述:

输出包含若干行,每行一个字符串s,表示用户的id。按照每个浏览的用户第一次浏览的顺序输出。

样例输入:

  1. 8
  2. qcjj
  3. benh
  4. qsmcgogo
  5. qcjj
  6. ducksajin
  7. benh
  8. ducksajin
  9. acidlemon

样例输出:

  1. qcjj
  2. benh
  3. qsmcgogo
  4. ducksajin
  5. acidlemon

提示:

共有以上5人点赞,按照第—次点的顺序输出即可。

思路与代码

哈希表模拟即可,简单模拟。

  1. def main():
  2. n = int(input())
  3. seen = set()
  4. ans = []
  5. for _ in range(n):
  6. s = input()
  7. if s in seen:
  8. continue
  9. seen.add(s)
  10. ans.append(s)
  11. for e in ans:
  12. print(e)
  13. if __name__ == "__main__":
  14. main()

第二题 小苯的粉丝关注

小苯是“小红书app”的忠实用户,他有n个账号,每个账号粉丝数为。

这天他又创建了一个新账号,他希望新账号的粉丝数恰好等于x。为此他可以向自己已有账号的粉丝们推荐自己的新账号,这样以来新账号就得到了之前粉丝的关注。

他想知道,他最少需要在几个旧账号发“推荐新账号”的文章,可以使得他的新账号粉丝数恰好为x,除此以外,他可以最多从中选择一个账号多次发“推荐新账号”的文章。

(我们假设所有旧账号的粉丝们没有重叠,并且如果在第i个旧账号的粉丝们推荐了新账号,则新账号会直接涨粉 下取整个,而如果小苯选择在第 i个旧账号中多次推荐新账号,那么新账号就可以直接涨粉。)

输入描述:

输入包含2行。 第一行两个正整数 n, x(1 ≤ n, k ≤ 100),分别表示小苯的旧账号个数,和新账号想要的粉丝数。 第二行n个正整数 (1 ≤ ≤ 100),表示小苯每个旧账号的粉丝数。

输出描述:

输出包含一行一个整数,表示小苯最少需要向多少个旧帐号推荐新账号,如果无法做到,输出-1。

样例输入:

  1. 5 8
  2. 1 2 3 4 10

样例输出:

2

提示:选择第3个和第5个旧账号,并在第3个账号多次发文。

思路与代码

比较典型的动态规划的题目,每个账号有三种状态:不发,发一次或者多发,那么按照dp套路来即可,比较简单,下面是记忆化搜索的代码。

  1. import sys
  2. def dfs(i, x, extra, n, a, memo):
  3. if x == 0:
  4. return 0
  5. if i >= n:
  6. return n + 1
  7. if memo[i][x][extra] != -1:
  8. return memo[i][x][extra]
  9. no = dfs(i + 1, x, extra, n, a, memo)
  10. one = n + 1
  11. if x >= a[i] // 2:
  12. one = dfs(i + 1, x - a[i] // 2, extra, n, a, memo) + 1
  13. multi = n + 1
  14. if x >= a[i] and not extra:
  15. multi = dfs(i + 1, x - a[i], True, n, a, memo) + 1
  16. memo[i][x][extra] = min(no, one, multi)
  17. return memo[i][x][extra]
  18. def main():
  19. input = sys.stdin.read
  20. data = input().split()
  21. n = int(data[0])
  22. x = int(data[1])
  23. a = list(map(int, data[2:2+n]))
  24. memo = [[[-1 for _ in range(2)] for _ in range(x + 1)] for _ in range(n + 1)]
  25. ans = dfs(0, x, False, n, a, memo)
  26. if ans == n + 1:
  27. print(-1)
  28. else:
  29. print(ans)
  30. if __name__ == "__main__":
  31. main()

小红的点赞

小红发布了n个笔记,每个笔记的点赞数为。小红观察到,每隔一段时间,某个笔记的点赞数就会加1。但是不会出现一个笔记点赞数连续增加的情况。也就是说,一个笔记赞数加1后,下一个加1的必然是另一个笔记。

现在小红想知道,对于每一个笔记,其赞数变成所有笔记赞数最多时,此时所有的笔记赞数之和的最小值是多少?

输入描述:

第一行输入一个正整数n,代表笔记的数量。

第二行输入n个正整数,代表每个笔记当前的赞数。

输出描述:

输出n行,每行输出一个整数,代表第i个笔记变成所有笔记赞数最多时,此时所有的笔记赞数之和的最小值。 特殊的,如果第i个笔记永远无法变成赞数最多,则输出-1。

样例输入:

  1. 3
  2. 3 1 4

样例输出:

  1. 9
  2. 15
  3. 8

提示:

对于第一个笔记,当它赞数加1时,赞数达到了4,变成所有笔记赞数最多,此时赞数之和为4+1+4=9。

对于第二个笔记,可以有以下增长方式:2->1->2->1->2->3->2,此时三个笔记的赞数都是5,赞数之和为15。

对于第三个笔记,初始时它的赞数就是最多,此时赞数之和为3+1+4=8。

思路与代码:

二分答案。

结论1:如果说点赞次数x是偶数,那么是不如x-1的(因为会导致其他的贴子点赞数+1)

结论2:如果点赞x可以,那么x+1就肯定可以,因此具有二段性,可以进行二分。

我们需要判断将某个帖子的点赞数最多的时候,我们二分点赞的次数,假设说点赞次数是x,那么当前帖子最多可以被点击x/2 + 1次(如果x是偶数的话,我们直接将x-1),那么如何判断当前帖子是否可以是最大的呢?

  1. 当前帖子的点赞数 like + x/2 + 1 是大于等于原帖子的最大值
  2. 剩余帖子的总点赞数 + x/2 的平均数小于等于 like + x/2 + 1.
  1. n = int(input())
  2. likes = [int(x) for x in input().split()]
  3. MX = max(likes)
  4. SUM = sum(likes)
  5. res = [0]*n
  6. # 总点赞数是x的时候,是否可以使得i变为最大值
  7. def check(x,i):
  8. # 如果x是偶数,我们要让他-1变为奇数
  9. if x%2==0: x-=1
  10. diff = x//2 + 1 # 需要增加的点赞数
  11. cur = SUM - likes[i] + (x-diff) # 排除当前帖子后,其他帖子点赞后的总数
  12. if diff + likes[i] >= MX and (like[i]+diff)*(n-1) >= cur: return True
  13. return False
  14. for i,like in enumerate(likes):
  15. # 将当前的like变为最大
  16. if len(likes) == 2 and like < mx-1:
  17. res[i] = -1
  18. continue
  19. if like == MX:
  20. res[i] = SUM
  21. continue
  22. # 如何让当前的like变为最大?
  23. # 如果总点赞数是 x的时候是可行的,那么此时 x+1,x+2,x+3...都是可行的(x必然是奇数)
  24. # 因此,总点赞数是具有二段型的,可以进行二分。
  25. l,r = 1, 10**9
  26. while l < r:
  27. mid = (l+r)>>1
  28. if check(mid,i): r = mid
  29. else: l = mid + 1
  30. res[i] = SUM + r
  31. print('\n'.join(map(str,res)))

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/681933
推荐阅读
相关标签
  

闽ICP备14008679号