1068 万绿丛中一点红 较复杂,容易理解错题意
易错点
题干背景中“独一无二颜色的那个像素点”,指出了颜色需要唯一的条件,即颜色值有重复的点并不算是符合要求的点,但是表达并不明确,和输入格式要求“如果这样的点不唯一,则输出 Not Unique”这句话容易混淆,输入格式要求这句话指的是如果有多个符合要求的点,则输出Not Unique。
代码
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
bool pic[1001][1001];
long long pic2[1001][1001];
int pic3[1001][1001];
int main()
{
int m,n;
int tol;
int ri,rj;
long long r;
int cnt=0;
cin>>m>>n>>tol;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
pic[i][j]=0;
pic3[i][j]=0;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>pic2[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(pic[i][j]==1){
continue;
}
if(abs(pic2[i+1][j]-pic2[i][j])<=tol&&i+1<=n-1){
pic[i+1][j]=1;
continue;
}
if(abs(pic2[i-1][j]-pic2[i][j])<=tol&&i-1>=0){
pic[i-1][j]=1;
continue;
}
if(abs(pic2[i][j+1]-pic2[i][j])<=tol&&j+1<=m-1){
pic[i][j+1]=1;
continue;
}
if(abs(pic2[i][j-1]-pic2[i][j])<=tol&&j-1>=0){
pic[i][j-1]=1;
continue;
}
if(abs(pic2[i-1][j-1]-pic2[i][j])<=tol&&j-1>=0&&i-1>=0){
pic[i-1][j-1]=1;
continue;
}
if(abs(pic2[i+1][j-1]-pic2[i][j])<=tol&&j-1>=0&&i+1<=n-1){
pic[i+1][j-1]=1;
continue;
}
if(abs(pic2[i+1][j+1]-pic2[i][j])<=tol&&j+1<=m-1&&i+1<=n-1){
pic[i+1][j+1]=1;
continue;
}
if(abs(pic2[i-1][j+1]-pic2[i][j])<=tol&&j+1<=m-1&&i-1>=0){
pic[i-1][j+1]=1;
continue;
}
pic3[i][j]=2;
for(int i1=0;i1<n;i1++){
for(int j1=0;j1<m;j1++){
if(pic2[i1][j1]==pic2[i][j]){
pic3[i][j]--;
}
}
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(pic3[i][j]==1){
ri=i;
rj=j;
r=pic2[i][j];
cnt++;
if(cnt>1){
cout<<"Not Unique";
return 0;
}
}
}
}
if(cnt==1){
cout<<"("<<(rj+1)<<", "<<(ri+1)<<"): "<<r;
}
else if(cnt==0){
cout<<"Not Exist";
}
return 0;
}

浙公网安备 33010602011771号