笔试题


meituan

001. 小美的用户名

小美是美团的前端工程师,为了防止系统被恶意攻击,小美必须要在用户输入用户名之前做一个合法性检查,一个合法的用户名必须满足以下几个要求:

  1. 用户名的首字符必须是大写或者小写字母。
  2. 用户名只能包含大小写字母,数字。
  3. 用户名需要包含至少一个字母和一个数字。

如果用户名合法,请输出 “Accept”,反之输出 “Wrong”。

格式:

输入:

  • 输入第一行包含一个正整数 T,表示需要检验的用户名数量。
  • 接下来有 T 行,每行一个字符串 s,表示输入的用户名。

输出:

  • 对于每一个输入的用户名 s,请输出一行,即按题目要求输出一个字符串。

提示:

  • 1 <= T <= 100
  • s 的长度不超过 20
输入:
     5
     Ooook
     Hhhh666
     ABCD
     Meituan
     6666
输出:
     Wrong
     Accept
     Wrong
     Wrong
     Wrong
n = int(input())
arr = []
for i in range(n):
    arr.append(input())

def check(s):
    if not s[0].isalpha() or not s.isalnum():
        return False
    if not s.isalpha() and not s.isdigit():
        return True
    return False


for i in range(n):
    if check(arr[i]):
        print("Accept")
    else:
        print("Wrong")

002. 小美的仓库整理

小美是美团仓库的管理员,她会根据单据的要求按顺序取出仓库中的货物,每取出一件货物后会把剩余货物重新堆放,使得自己方便查找。已知货物入库的时候是按顺序堆放在一起的。如果小美取出其中一件货物,则会把货物所在的一堆物品以取出的货物为界分成两堆,这样可以保证货物局部的顺序不变。
已知货物最初是按 1~n 的顺序堆放的,每件货物的重量为 w[i] ,小美会根据单据依次不放回的取出货物。请问根据上述操作,小美每取出一件货物之后,重量和最大的一堆货物重量是多少?

格式:

输入:

  • 输入第一行包含一个正整数 n ,表示货物的数量。
  • 输入第二行包含 n 个正整数,表示 1~n 号货物的重量 w[i] 。
  • 输入第三行有 n 个数,表示小美按顺序取出的货物的编号,也就是一个 1~n 的全排列。

输出:

  • 输出包含 n 行,每行一个整数,表示每取出一件货物以后,对于重量和最大的一堆货物,其重量和为多少。

提示:

  • 1 <= n,m <= 50000
  • 1 <= w[i] <= 100
输入:
    5
    3 2 4 4 5 
    4 3 5 2 1
输出:
    9
    5
    5
    3
    0
解释:
原本的状态是 {{3,2,4,4,5}} ,取出 4 号货物后,得到 {{3,2,4},{5}} ,第一堆货物的和是 9 ,然后取出 3 号货物得到 {{3,2}{5}} ,此时第一堆和第二堆的和都是 5 ,以此类推。

超时。。。

n = int(input())
arr = [int(i) for i in input().split()]
choices = [int(i) for i in input().split()]
#print(arr,choices)

d = {}
pre = 0
for i in range(n):
    pre += arr[i]
    d[i+1] = pre

for i in choices:
    p, num = i, d[i]
    while p != n+1:
        d[p] -= num
        p += 1

    
    print(max(d.values()))

003. 小美的跑腿代购

小美的一个兼职是美团的一名跑腿代购员,她有 n 个订单可以接,订单编号是 1~n ,但是因为订单的时效性,他只能选择其中 m 个订单接取,精明的小美当然希望自己总的获利是最大的,已知,一份订单会提供以下信息,跑腿价格 v ,商品重量 w kg,商品每重 1kg ,代购费用要加 2 元,而一份订单可以赚到的钱是跑腿价格和重量加价之和。小美可是开兰博基尼送货的人,所以自然不会在意自己会累这种事情。请问小美应该选择哪些订单,使得自己获得的钱最多。
请你按照选择的订单编号的从小到大顺序,如果存在多种方案,输出订单编号字典序较小的方案。

格式:

输入:

  • 输入第一行包含两个正整数 n,m,表示订单的数量和小美可以接的订单数量。
  • 接下来有 n 行,第 i 行表示 i-1 号订单的信息。每行有两个正整数 v 和 w ,表示一个订单的跑腿价格和商品重量。

输出:

  • 输出包含 m 个 1~n 之间的正整数,中间用空格隔开,表示选择的订单编号。

提示:

  • 1 <= n, m <= 10000
  • 1 <= v, w <= 1000
输入:
     5 2
     5 10
     8 9
     1 4
     7 9
     6 10
输出:2 5
from heapq import *

n, m = (int(i) for i in input().split())
p = []
for i in range(n):
    v, w = (int(i) for i in input().split())
    heappush(p,[-v-w*2,i+1])

ans = []
for i in range(m):
    val,idx = heappop(p)
    ans.append(idx)
ans.sort()
for i in range(m):
    print(ans[i], end=" ")
import sys
import heapq
result = []
count, limit = map(int, input().split())
orders = []
index = 1
for line in sys.stdin:
    tmp = list(map(int,line.split()))
    heapq.heappush(orders, [ -(tmp[0] + 2 * tmp[1]) ,index])
    index += 1
for i in range(limit):
    result.append(heapq.heappop(orders)[-1])
print(" ".join(str(i) for i in sorted(result)))

第二段抄的,熟悉一下 map() sys.stdin

004. 小团的复制粘贴

格式:

提示:



005. 小美的区域会议

格式:

提示:



006. 小团的神秘暗号

格式:

提示:



格式:

提示:



格式:

提示:




文章作者: ╯晓~
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ╯晓~ !
评论
  目录