网易互娱8.12笔试

网易互娱8.12笔试
第一题打麻将AC:
这一道题出的非常不好,幸亏我前几天刚刚学会打麻将要不然肯定做不出来。
题意解析:按照他的规则前面7张风头已经凑好了,||这之前的题干都是废话,这之后是要考的意思:||  判断给的牌能不能凑他规定的三个扑。
麻将规则解释:在此题中我们需要判断牌有没有三个扑,有三个扑便胜利,一般来说一个 “扑” 为(AAA)或者(ABC),对应的实例:(一万 一万 一万)或者(一饼 二饼 三饼),但是笔试题目中的改变了可以胜利的 扑 的规则,把数字从同样(AAA)或者连续(ABC)改成了:147 258 369  这三个特殊组合,因为牌数太多所以可以在这三扑加起来之后去掉随意的两张牌,这样也可以胜利,打过麻将的同学便能够体会出题目中没有说明的关键信息:胜利条件依然是需要三个 扑,因此只需要按照平时打麻将的思路:确定每一个花色的 扑 合不合法就行了,如果三个扑全部合法,那么胜利。
解题思路:
从题目规则可知,必须三个花色全都有,而且易知7张牌不能有重复的,要不然按他的规则不可能赢。
所以判断每种花色的数字是不是规定数字组合的子集,如果是那么这个花色是合法扑,如果三扑合法那么胜利。
根据他的规则,只要是7张不同的牌,每个花色的数字都是 完全扑(就是三张)数字组合的子集(因为他的规则要求可以随意在三个完全扑的情况下去掉两个牌,所以是子集就行),那就胜利。因为如果你摸了 一万 五万 那肯定赢不了因为1 5 无法满足1 4 7或者2 5 8这两个组合中的任意一个,也就意味着你这两张牌组不成一扑,而且总共7张牌需要三种花色的三扑,有一张错的牌就不够。
times = int(input())
cmds = []
for _ in range(times):
    cmds.append(input())
for cmd in cmds:
    w = set()
    b = set()
    t = set()
    pais = list(cmd.split())
    for pai in pais:
        num = int(pai[0])
        huase = pai[1]
        if huase == 'W':
            w.add(num)
        elif huase == 'B':
            b.add(num)
        else:
            t.add(num)
    if len(w) + len(b) + len(t) != 7:
        print('NO')
    else:
        checka = {1, 4, 7}
        checkb = {2, 5, 8}
        checkc = {3, 6, 9}
        wf = bf = tf = False
        if w <= checka or w <= checkb or w <= checkc:
            wf = True
        if b <= checka or b <= checkb or b <= checkc:
            bf = True
        if t <= checka or t <= checkb or t <= checkc:
            tf = True
        if wf and bf and tf:
            print('YES')
        else:
            print('NO')
2.炸格子
我是用的暴力解,20%
N=int(input())
mat=[]
for _ in range(N):
    rowin=list(map(int,input().split()))
    mat.append(rowin)


while len(mat)>0:
    maxsum=0
    maxr=0
    maxc=0
    for row in range(len(mat)):
        for col in range(len(mat)):
            suma=sum(mat[row])
            sumb=0
            for rr in mat:
                sumb+=rr[col]
            mysum=suma+sumb-mat[row][col]
            if mysum>maxsum:
                maxsum=mysum
                maxr=row
                maxc=col
    print((maxr+1),(maxc+1))
    mat.pop(maxr)
    for rr in mat:
        rr.pop(maxc)

3.找出最大任务的时间 0%
我觉得应该是程序栈的思路,写了半天没做出来。
下面是写了一半的代码,脑子都死机了
for _ in range(int(input())):
    cmdn = int(input())
    cmds = []
    for _ in range(cmdn):
        cmds.append(input())
    time_list = []
    id_list = []
    status_list = []
    for cmd in cmds:
        time, id, status = map(int, cmd.split())
        time_list.append(time)
        id_list.append(id)
        status_list.append(status)
    id_stack=[]
    time_stack=[]
    d=dict()
    for id in id_list:
        d[id]=0
    maxtime=0
    qiant=0
    for i in range(cmdn):
        if status_list[i]==0:
            if len(id_stack)>0:
                d[id_stack[-1]]+=time_list
            id_stack.append(id_list[i])
        else:
            id_stack.pop()



#笔试题目#
全部评论
第三题我用模拟堆写的,40%。第二题暴力40%😂,终于有python 的码友了
点赞 回复 分享
发布于 2020-08-13 00:07
我acac 70%
点赞 回复 分享
发布于 2020-08-13 15:52

相关推荐

10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务