代码渣渣居然第四范式编程题ak,兴奋之余发一下题解
今年秋招以来,终于有一次代码题ak了……忍不住发下题解,希望各位大佬指正……毕竟我就是个渣滓
这个好像是剑指offer里的一道比较经典的题目了,第一步当然是先print('false')一下,ac60%,然后本来在读数据的时候想用list(map(int, input(),split())),但是这样操作完之后,case正确率从60%降到了40%,猜测可能是这样超时了?于是只能投机取巧:
lst = input().split() m = int(lst[0]) n = int(lst[1]) mat = [] hav = False for i in range(m): lst = input() mat += [lst] k = int(input()) hav = False for l in mat: l1 = list(map(int, l.split())) if l1[0] > k or l1[-1] < k: continue else: for j in l1: if j == k: hav = True break if hav: print('true') else: print('false')
读数据的时候直接input(),然后后面再一行一行查,当然可以用二分查找更快,但是懒得写了【不会写】……反正ac了
思路:维护一个dict记录每个点的颜色,对于每条边的第二个点,如果之前没记录过这个点,就加进去,并且根据第一个点的颜色记录它的颜色;如果有,就看它前面那个点的颜色是不是符合要求,如果不符合直接输出No【为啥我用的list没用dict?因为没用过呗!不熟呗!】统计完所有边之后,因为题里说可能不连通,所以再看看点数是不是跟n一样多
感觉我写的代码有问题,sort的时候没考虑到可能一条边从编号大的点指向编号小的点的情况,不过反正ac了,不管了……
lst = input().split() N = int(lst[0]) M = int(lst[1]) blist = [] p = [] pn = [] for i in range(M): lst = list(map(int, input().split())) blist += [lst] blist.sort() valid = True for b in blist: if not b[0] in p: p += [b[0]] pn += [0] if not b[1] in p: p += [b[1]] if pn[p.index(b[0])] == 0: pn += [1] else: pn += [0] else: if pn[p.index(b[0])] == pn[p.index(b[1])]: valid = False break if len(p) < N: valid = False if valid: print('Yes') else: print('No')
结束了!
#第四范式##题解#