经验总结:
注意题目说明的是独一无二的像素点,那么就是说,最终答案的这个像素点必须唯一,整个分辨率画中不能有重复值。可以开一个数组标记值是否唯一。
对于分辨率边框上的像素点可以在数组边缘加上一个框,这个框上的像素点为0来加以判断。
C++代码:
#include<bits/stdc++.h>
using namespace std;
int flag[16777216]; //开一个2^24的数组标记值是否唯一
int main() {
int m,n,tol,unique = 0,x,y;
scanf("%d %d %d",&m,&n,&tol);
int table[n+2][m+2]= {0}; //多加的2代表的是周围的边框
for(int i=1; i<n+1; i++) { //从1开始赋值,边框默认为0
for(int j=1; j<m+1; j++) {
scanf("%d",&table[i][j]);
flag[table[i][j]]++;
}
}
for(int i=1; i<n+1; i++) {
for(int j=1; j<m+1; j++) {
int count = 0;
if(flag[table[i][j]] == 1) { //如果这个像素点的值不是唯一的,则跳过
for(int ii=i-1; ii<i+2; ii++) {
for(int jj=j-1; jj<j+2; jj++) {
if(abs(table[i][j]-table[ii][jj])>tol) {
count++;
}
}
}
}
if(count == 8) {
unique++;
if(unique>1) {
printf("Not Unique");
return 0;
}
x=j;
y=i;
}
}
}
if(unique == 1) {
printf("(%d, %d): %d",x,y,table[y][x]);
} else {
printf("Not Exist");
}
return 0;
}