300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Bnuoj 4315 美女来找茬

Bnuoj 4315 美女来找茬

时间:2018-07-03 04:44:58

相关推荐

Bnuoj 4315 美女来找茬

美女来找茬

Time Limit: 1000msMemory Limit: 65536KB 64-bit integer IO format: %lld Java class name: Main

Submit Status PID: 4351

寒假的时候,大钰儿在家闲得无聊,便玩起了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

很简单的水题,但是在比赛的时候感觉好难,一开始以为是用Dp不停寻找最小的矩形,然后做了好久,然后又一直在用搜索尝试,结果还是没做出来。原来是一开始把题意搞错了。

其实题意是让你求一个能够包含所有差值的绝对值大于五的点的矩形,然后就是直接找左上角一个最小的x,y,再找一个右下角的最大的x,y,输出就可以了。还有就是数据有多组,不存在矩形的话标记输出-1。

代码:

#include<stdio.h>#include<algorithm>#include<iostream>#include<math.h>#include<string>#include<string.h>int a[205][205],b[205][205],ans[205][205];int main(){int n,m,k;while(~scanf("%d%d",&n,&m)){memset(ans,0,sizeof(ans));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]);k=b[i][j]-a[i][j];if(abs(k)>5)ans[i][j]=1;//标记差值大于五的点;}int x2=-1,y2=-1,x1=10005,y1=10050,flag=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(ans[i][j]==1){flag=1;if(x1>i)x1=i;//最小的X;if(y1>j)y1=j;//最小的y;}if(ans[i][j]==1){if(x2<i)x2=i;//最大的x;if(y2<j)y2=j;//最大的y;}}}if(!flag)printf("-1\n");elseprintf("%d %d %d %d\n",x1,y1,x2,y2);}return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
扩展阅读