网易互娱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()