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;
}
posted @ 2022-07-11 23:57  qwasdasd  阅读(62)  评论(0)    收藏  举报