1499: 梯田

xiaoxiao2021-02-28  104

1499: 梯田

Time Limit: 1 Sec   Memory Limit: 128 MB Submit: 1   Solved: 1 上一题 Submit Status 下一题

Description

土豪YZK在一块小岛上有着一大片n*m的梯田,每块1*1的田地都有它的高度。奴隶们不甘被YZK剥削,他们联合起来决定发动一场海啸淹掉YZK的梯田,因为要留一部分给自己吃,所以他们决定至少淹掉p块田地,但是不能超过q块田地,否则会因为剩下的田地不够而把奴隶自己饿死。现在给你一个n*m的矩阵,代表梯田中每块田地的高度,求能否发动一场高度为h的海啸,使得满足奴隶们的要求。由于发动海啸代价很高,所以如果存在多个解,请输出最小的一个h,否则输出-1。

Input

第一行是一个正整数T,代表数据组数

对于每组数据,第一行为四个整数n,m,p,q

之后是一个n*m的矩阵,矩阵中每个整数代表每块田地高度

1<=T<=100

1<=n,m<=100

1<=p<=q<=n*m

1<=梯田高度<=1000000

Output

对于每组数据,如果能找到h,请输出最小的h,否则输出-1

每组输出占一行

Sample Input

23 3 3 61 2 34 5 67 8 94 4 5 61 2 2 12 1 1 22 1 1 21 2 2 1

Sample Output

3-1

HINT

一块田地被淹的条件为: 一、它自身的高度<=h 二、它相邻的四块田地中至少有一块被淹没 //代码 # include<stdio.h> int main(){ int a,m,n ,h, i , j ,k,b[10001]={0}; int y , l ,t; int sum ,h1; scanf("%d",&a); for(i=0;i<a ;i++) { scanf("%d %d %d %d",&n,&m,&y,&l); for(j=0;j<n*m;j++) { scanf("%d",&b[j]); } for(j=0;j<n*m-1;j++) { for(k=j+1;k<n*m;k++) { if(b[j]>b[k]) { t=b[j]; b[j]=b[k]; b[k]= t; } } } for(h=b[y-1];;h++) { sum=y; for(j=y;j<n*m;j++) { if(b[j]<=h) sum++; if(b[j]>h||h==b[n*m-1]) break ; } if(h==b[n*m-1]) { printf("%d\n",-1); break; } if(sum < l) { printf("%d\n",h);break; } } } return 0; }
转载请注明原文地址: https://www.6miu.com/read-50545.html

最新回复(0)