defisValide(s): stack = [] brackets = {'(':')', '[':']', '{':'}'} for char in s: if char in brackets.keys(): stack.append(char) elif char in brackets.values(): ifnot stack or brackets[stack.pop()]!= char: returnFalse returnnot stack
defmain(): try: s = input().strip() result = isValide(s) print('true'if result else'false') except EXception as e: print('false') if __name__ == '__main__': main()
from collections import Counter import sys deffind(parent, x): if parent[x] != x: parent[x] = find(parent, parent[x]) return parent[x] defmerge(parent, rank, x, y): if x notin parent: parent[x] = x rank[x] = 0 if y notin parent: parent[y] = y rank[y] = 0 x = find(parent, x) y = find(parent, y) if x == y: return if rank[x] > rank[y]: parent[y] = x elif rank[x] < rank[y]: parent[x] = y else: parent[y] = x rank[x] += 1 deflargestComponentSize(nums): ifnot nums: return0 parent = {} rank = {} for num in nums: if num notin parent: parent[num] = num rank[num] = 0 i = 2 while i * i <= num: if num % i == 0: factor = i if factor notin parent: parent[factor] = factor rank[factor] = 0 merge(parent, rank, num, factor) factor = num // i if factor notin parent: parent[factor] = factor rank[factor] = 0 merge(parent, rank, num, factor) i += 1 counter = Counter(find(parent, num) for num in nums) returnmax(counter.values()) defmain(): input_data = sys.stdin.read().split() n = int(input_data[0]) nums = list(map(int, input_data[1 : n + 1])) result = largestComponentSize(nums) print(result) if __name__ == '__main__': main()
defmerge(parent, rank, x, y): if x notin parent: parent[x] = x rank[x] = 0 if y notin parent: parent[y] = y rank[y] = 0 x = find(parent, x) y = find(parent, y) if x == y: return if rank[x] > rank[y]: parent[y] = x elif rank[x] < rank[y]: parent[x] = y else: parent[y] = x rank[x] += 1
deflargestComponentSize(nums): ifnot nums: return0 parent = {} rank = {} for num in nums: if num notin parent: parent[num] = num rank[num] = 0 i = 2 temp = num while i * i <= temp: # 使用 temp 避免修改 num if temp % i == 0: factor = i merge(parent, rank, num, factor) while temp % i == 0: # 除尽 i temp //= i i += 1 if temp > 1: # 处理剩余因子(质数或大于 √num) merge(parent, rank, num, temp) counter = Counter(find(parent, num) for num in nums) returnmax(counter.values())
defmain(): input_data = sys.stdin.read().split() n = int(input_data[0]) nums = list(map(int, input_data[1 : n + 1])) result = largestComponentSize(nums) print(result)
if __name__ == '__main__': main()
具体修改点:
因子分解优化:
使用 temp 代替 num,逐步除去因子 i,直到无法整除。
循环结束后,若 temp > 1,说明剩余一个大于 √num 的因子或质数,合并 num 和 temp。
移除冗余合并:
原代码中每次找到因子 i 就合并 num 和 i 以及 num // i,可能重复合并。修改后只合并必要的因子。