标签:1068 PAT 万绿丛中 int 像素 abs 颜色 include 像素点
题目:
对于计算机而言,颜色不过是像素点对应的一个 24 位的数值。现给定一幅分辨率为 M×N 的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的颜色与其周围 8 个相邻像素的颜色差充分大。
输入格式:
输入第一行给出三个正整数,分别是 M 和 N(≤ 1000),即图像的分辨率;以及TOL,是所求像素点与相邻点的颜色差阈值,色差超过 TOL 的点才被考虑。随后 N 行,每行给出 M 个像素的颜色值,范围在 [0,224 ) 内。所有同行数字间用空格或 TAB 分开。
输出格式:
在一行中按照 (x, y): color 的格式输出所求像素点的位置以及颜色值,其中位置 x 和 y分别是该像素在图像矩阵中的列、行编号(从 1 开始编号)。如果这样的点不唯一,则输出 Not Unique;如果这样的点不存在,则输出Not Exist。
题目分析:越来越读不懂题目啦~要求是一个独一无二的数,并且还满足与8个数之差大于某个值
#include<iostream>
#include<vector>
#include<cmath>
#include<map>
using namespace std;
bool eight(vector<vector<int>>v,int i,int j,int k,int n,int m){
if(i-1>=0){
if(j-1>=0) if(abs(v[i-1][j-1]-v[i][j])<=k) return false;
if(abs(v[i-1][j]-v[i][j])<=k) return false;
if(j+1<m) if(abs(v[i-1][j+1]-v[i][j])<=k) return false;
}
if(j-1>=0) if(abs(v[i][j-1]-v[i][j])<=k) return false;
if(j+1<m) if(abs(v[i][j+1]-v[i][j])<=k) return false;
if(i+1<n) {
if(j-1>=0) if(abs(v[i+1][j-1]-v[i][j])<=k) return false;
if(abs(v[i+1][j]-v[i][j])<=k) return false;
if(j+1<m) if(abs(v[i+1][j+1]-v[i][j])<=k) return false;
}
return true;
}
int main(){
int n,m,shuzhi;
int x,y,shu;
int num=0;
cin>>m>>n>>shuzhi;
map<int,int>vis;
vector<vector<int>>v(n);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
int d;cin>>d;
v[i].push_back(d);
vis[d]++;
}
}
for(int i=0;ai<n;i++)
for(int j=0;j<m;j++)
if(vis[v[i][j]]==1&&eight(v,i,j,shuzhi,n,m)==true) {
num++;
x=j+1;
y=i+1;
shu=v[i][j];
}
if(num==1) printf("(%d, %d): %d\n",x,y,shu);
else if(num==0) cout<<"Not Exist\n";
else cout<<"Not Unique\n";
}
标签:1068,PAT,万绿丛中,int,像素,abs,颜色,include,像素点 来源: https://blog.csdn.net/qq_43733265/article/details/113662898
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。