测试点3 测试点5 容易错
说一下坑点。
1、首先一个点是独一无二。这个点如果出现2次及以上,直接跳过;
2、矩阵的边缘也要考虑,可以给这个矩阵加个边框,值初始化为0;
3、题目说颜色差充分大。检查一下是否加上了abs;
参考代码如下
#include <iostream>
#include <string>
using namespace std;
#define maxn 16*1024*1024
long long a[1010][1010];
long long b[maxn];
int main(){
int m,n;
long long tol;
scanf("%d%d%lld",&m,&n,&tol);
int i,j; //n行m列
long long num;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
scanf("%lld",&num);
a[i][j]=num;
b[num]++;
}
}
for(i=0;i<=m+1;i++){
a[0][i]=0;
}
for(i=0;i<=m+1;i++){
a[n+1][i]=0;
}
for(i=0;i<=n+1;i++){
a[i][0]=0;
}
for(i=0;i<=n+1;i++){
a[i][m+1]=0;
}
int pos_i,pos_j;
int sum=0;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
if(b[a[i][j]]>1){
continue;
}
if(abs(a[i][j]-a[i-1][j])>tol&&abs(a[i][j]-a[i+1][j])>tol&&abs(a[i][j]-a[i][j-1])>tol&&abs(a[i][j]-a[i][j+1])>tol
&&abs(a[i][j]-a[i-1][j-1])>tol&&abs(a[i][j]-a[i+1][j-1])>tol&&abs(a[i][j]-a[i-1][j+1])>tol&&abs(a[i][j]-a[i+1][j+1])>tol){
sum++;
pos_i=i;pos_j=j;
}
}
}
if(sum==1){
printf("(%d, %d): %lld",pos_j,pos_i,a[pos_i][pos_j]);
}else if(sum==0){
printf("Not Exist");
}else printf("Not Unique");
return 0;
}