本文共 1919 字,大约阅读时间需要 6 分钟。
为了解决农农在浙农林大学行走时不踩进水坑的问题,我们需要设计一个程序来判断他能否在给定的水位下安全地从起点 (1, 1) 到达终点 (n, n)。我们可以使用二分查找配合广度优先搜索(BFS)来高效解决这个问题。
import sysfrom collections import dequedef main(): data = list(map(int, sys.stdin.read().split())) ptr = 0 n = data[ptr] ptr += 1 a = [] for i in range(n): row = data[ptr:ptr + n] ptr += n a.append(row) def check(mid): visited = [[0] * (n + 1) for _ in range(n + 1)] q = deque() q.append((1, 1)) visited[1][1] = 1 if a[1][1] > mid or a[n][n] > mid: return False if n == 1: return True directions = [(-1, 0), (1, 0), (0, -1), (0, 1)] while q: x, y = q.popleft() for dx, dy in directions: nx = x + dx ny = y + dy if 1 <= nx <= n and 1 <= ny <= n: if not visited[nx][ny] and a[nx][ny] <= mid: if nx == n and ny == n: return True visited[nx][ny] = 1 q.append((nx, ny)) return False low = 1 high = 100000 max_X = 0 while low <= high: mid = (low + high) // 2 can = check(mid) if can: max_X = mid low = mid + 1 else: high = mid - 1 q_num = data[ptr] ptr += 1 for _ in range(q_num): x = data[ptr] ptr += 1 if x <= max_X: print("Wuhu") else: print("Hmmm")if __name__ == "__main__": main() sys.stdin.read来高效读取所有输入数据,并将其转换为整数列表进行处理。转载地址:http://hpzgz.baihongyu.com/