1068 万绿丛中一点红
Statement
Metadata
- 作者: CHEN, Yue
- 单位: 浙江大学
- 代码长度限制: 16 KB
- 时间限制: 400 ms
- 内存限制: 64 MB
对于计算机而言,颜色不过是像素点对应的一个 24 位的数值。现给定一幅分辨率为
输入格式
输入第一行给出三个正整数,分别是
输出格式
在一行中按照 (x, y): color
的格式输出所求像素点的位置以及颜色值,其中位置 x
和 y
分别是该像素在图像矩阵中的列、行编号(从 1 开始编号)。如果这样的点不唯一,则输出 Not Unique
;如果这样的点不存在,则输出 Not Exist
。
输入样例 1
8 6 200
0 0 0 0 0 0 0 0
65280 65280 65280 16711479 65280 65280 65280 65280
16711479 65280 65280 65280 16711680 65280 65280 65280
65280 65280 65280 65280 65280 65280 165280 165280
65280 65280 16777015 65280 65280 165280 65480 165280
16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215
输出样例 1
输入样例 2
输出样例 2
输入样例 3
输出样例 3
Solution
#include <bits/stdc++.h>
using namespace std;
#define MAXN 1000
int a[MAXN][MAXN];
int tran(int x1, int y1, int x2, int y2) {
return abs(a[x1][y1] - a[x2][y2]);
}
int main() {
int m, n, i, j, tol, num, x, y, color, total = 0, flag;
map<int, int> q;
cin >> m >> n >> tol;
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
scanf("%d", &a[i][j]);
q[a[i][j]]++;
}
}
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
flag = 1;
if (i) {
if (tran(i, j, i - 1, j) <= tol)
flag = 0;
if (j) {
if (tran(i, j, i - 1, j - 1) <= tol)
flag = 0;
}
if (m - j - 1) {
if (tran(i, j, i - 1, j + 1) <= tol)
flag = 0;
}
}
if (j) {
if (tran(i, j, i, j - 1) <= tol)
flag = 0;
}
if (n - i - 1) {
if (tran(i, j, i + 1, j) <= tol)
flag = 0;
if (j) {
if (tran(i, j, i + 1, j - 1) <= tol)
flag = 0;
}
if (m - j - 1) {
if (tran(i, j, i + 1, j + 1) <= tol)
flag = 0;
}
}
if (m - j - 1) {
if (tran(i, j, i, j + 1) <= tol)
flag = 0;
}
if (flag && q[a[i][j]] == 1)
total++, x = j + 1, y = i + 1, color = a[i][j];
}
}
if (total > 1)
cout << "Not Unique";
else if (total)
printf("(%d, %d): %d", x, y, color);
else
cout << "Not Exist";
cout << "\n";
}
Last update: May 4, 2022