package main import ( "fmt" ) func main() { n := 0 m := 0 k := 0 for { num, _ := fmt.Scan(&n, &m, &k) if num == 0 { break } else { arr := make([][]int, n) for i:=0; i<n; i++ { arr[i] = make([]int, m) for j:=0; j<m; j++ { fmt.Scan(&arr[i][j]) } } if process(arr, k) { fmt.Println("Yes") } else { fmt.Println("No") } } } } // 类似二分查找,从右上角开始找,右上角代代表中间这个数 // arr[i][j] > k, 说明这个数据太大了, j-- // arr[i][j] < k, 说明这个数据太小了, i++ // 重复这个过程,直到找到或找不到这个数 func process(arr [][]int, k int) bool { n, m := len(arr), len(arr[0]) i, j := 0, m-1 for i<n && i>=0 && j>=0 && j<m { if arr[i][j] == k { return true } else if arr[i][j] > k{ j-- } else { i++ } } return false }