第一题
解题思路:
签到题,把帖子按好评度降序排列,再将人按升序排列。
第二题
解题思路
从左到右遍历,如果当前元素没有错排,将其与后一个交换,这样两个元素一定都错排。
第三题
、
解题思路
这题当时暴力捞分,现在思路是先将石头按高度升序排列,用哈希表记录已经遍历的元素,对于每个元素,从1遍历到sqrt(ai),在哈希表中找到因子,建立邻接表。再用优先队列优化的dijkstra算法算出最短路。但时间复杂度是O(n+m)logn+O(n^(3/2)),其中m是边的个数。最坏情况下O(m)=O(n^2)。
import heapq n = int(input()) a = list(map(int, input().split())) if n == 1: print(0) elif a[0] == a[-1]: print(1) else: mx = max(a) edges = [[] for _ in range(mx + 1)] s = set(a) for x in s: for t in (x + x, mx + 1, x): if t in s: cost = t // x edges[x].append((t, cost)) edges[t].append((x, cost)) dist = [float('inf')] * (mx + 1) dist[a[0]] = 0 q = [(0, a[0])] vis = [False] * (mx + 1) while q: d, u = heapq.heappop(q) if vis[u]: continue vis[u] = True for v, w in edges[u]: if dist[v] > d + w: dist[v] = d + w heapq.heappush(q, (dist[v], v)) print(dist[a[-1]] if dist[a[-1]] != float('inf') else -1)
欢迎各位大佬评论区分享思路!