8.11贝壳笔试
java后端开发岗位,第四题用了图的最小生成树求的,并查集,只过了40,有没有大佬指点下哪里错了
# 第一题 会问字符串 AC import sys n = int(sys.stdin.readline().strip()) s = sys.stdin.readline().strip() res = 0 for i in range(n//2): if s[i] != s[-i-1]: res+=1 print(res)
# 第二题 方块着色问题 AC import sys import math t = int(sys.stdin.readline().strip()) res = [] def issu(num): for i in range(2, int(math.sqrt(num))+1): if num%i ==0: return i return num for i in range(t): n, m = list(map(int, sys.stdin.readline().strip().split())) r1, r2 = float('inf'),float('inf') if n >1: r1 = issu(n) if m >1: r2 = issu(m) if m == 1 and n ==1: r1 = r2 =1 res.append(min(r1, r2)) for i in res: print(i)
# 第三题 # 不会
# 第四题 40 import sys def Cab(a,b): res = 1 if b > a//2: b = a-b for i in range(a,a-b,-1): res *=i for i in range(1,b+1): res /=i return int(res) n, m = list(map(int, sys.stdin.readline().strip().split())) edges = [] for _ in range(m): u, v, a, b = list(map(int, sys.stdin.readline().strip().split())) w = Cab(a,b) edges.append([u,v,w]) edges.sort(key= lambda x: x[2],reverse=True) parent = list(range(n+1)) rank = [1]*(n+1) def find(x): if parent[parent[x]] != parent[x]: parent[x] = find(parent[x]) return parent[x] def union(x,y): px,py = find(x),find(y) if px == py: return False if rank[px] > rank[py]: parent[py] = px elif rank[px] < rank[py]: parent[px] = py else: parent[px] = py rank[py] += 1 return True res = 0 for x, y, w in edges: if union(x,y): res +=w flag = True for i in range(1, n): if find(i) != find(i+1): flag = False break if flag: print(res%1000000007) else: print(-1)