A. 美女来找茬
Time Limit: 1000ms
Memory Limit: 65536KB
64-bit integer IO format:
%lld Java class name:
Main
寒假的时候,大钰儿在家闲得无聊,便玩起了QQ游戏美女来找茬。
他发现网络上高手很多,自己根本不是他们的对手。
于是,他心存
”
邪念
”
,写了一个作弊器(
matlab
版),瞬间有了千里眼的水平。
下面是作弊器的效果图,左图中的亮处便是两幅图不同的地方。
在写作弊器的时候,他遇到了一些问题,需要你来解决。
假设两张美女的图片都是
N*M
像素
的整数矩阵,大钰儿认为两幅图中不同的像素点是指在同一像素点的像素值相差大于
5
的点。
如下面两个
4*4
的图片,大钰儿认为坐标为
1 1
和
2 2
的像素点是不同的。所以,能包括两个不同点的最小矩形左上角坐标为
1 1
,右下角坐标为
2 2
。
你的任务就是帮他找到一个最小的矩形,这个矩形可以包括所有大钰儿认为两幅图中不同的像素点。
Input
第一行两个整数,N和M(1<=N,M<=200),代表图片的高度和宽度。
接下来输入两个
N
行
M
列
的整数矩阵,代表图片的像素值,范围均为
[0 10000]
。注意,每个矩阵前均有一个空行。
Output
如果存在不同的像素点,则输出一行整数x1 y1 x2 y2,x1 y1代表最小矩形的左上角行列坐标,x2 y2代表右下角的行列坐标,坐标从1 1开始。
如果不存在,则输出一个
-1
。
Sample Input
4 4 0 0 6 6 0 6 0 0 1 1 1 1 0 0 0 0 6 0 1 5 0 0 0 4 1 2 2 1 0 0 0 0
Sample Output
1 1 2 2
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <bits/stdc++.h>
using namespace std;
int a[201][201];
int b[201][201];
int c[201][201];
int jdz(int x,int y){
if(x>=y)return x-y;
else
return y-x;
}
int main()
{
int n,m,minx,miny,maxx,maxy,ans;
while(~scanf("%d%d",&n,&m)){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d",&a[i][j]);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d",&b[i][j]);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
c[i][j]=jdz(a[i][j],b[i][j]);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(c[i][j]<6)
c[i][j]=0;
}
}
minx=99999999;
miny=99999999;
maxx=-1;
maxy=-1;
ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(c[i][j]!=0)
ans++;
}
}
if(ans!=0){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(c[i][j]>0){
if(i<minx){minx=i;}
if(j<miny){miny=j;}
if(i>maxx){maxx=i;}
if(j>maxy){maxy=j;}
}
}
}
printf("%d %d %d %d\n",minx,miny,maxx,maxy);
}
else
printf("-1\n");
}
return 0;
}