1068 萬綠叢中一點(diǎn)紅 (20 分)

對于計(jì)算機(jī)而言,顏色不過是像素點(diǎn)對應(yīng)的一個(gè) 24 位的數(shù)值?,F(xiàn)給定一幅分辨率為 M×N 的畫,要求你找出萬綠叢中的一點(diǎn)紅,即有獨(dú)一無二顏色的那個(gè)像素點(diǎn),并且該點(diǎn)的顏色與其周圍 8 個(gè)相鄰像素的顏色差充分大。

輸入格式:

輸入第一行給出三個(gè)正整數(shù),分別是 M 和 N(≤ 1000),即圖像的分辨率;以及 TOL,是所求像素點(diǎn)與相鄰點(diǎn)的顏色差閾值,色差超過 TOL 的點(diǎn)才被考慮。隨后 N 行,每行給出 M 個(gè)像素的顏色值,范圍在 [0,224 ) 內(nèi)。所有同行數(shù)字間用空格或 TAB 分開。

輸出格式:

在一行中按照 (x, y): color 的格式輸出所求像素點(diǎn)的位置以及顏色值,其中位置 x 和 y 分別是該像素在圖像矩陣中的列、行編號(hào)(從 1 開始編號(hào))。如果這樣的點(diǎn)不唯一,則輸出 Not Unique;如果這樣的點(diǎn)不存在,則輸出 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:

(5, 3): 16711680

輸入樣例2:

4 5 2
0 0 0 0
0 0 3 0
0 0 0 0
0 5 0 0
0 0 0 0

輸出樣例2:

Not Unique

輸入樣例3:

3 3 5
1 2 3
3 4 5
5 6 7

輸出樣例3:

Not Exist

AC代碼:

#include <cmath>
#include <cstdio>
#include <map>

using namespace std;

int a[1001][1001] = {0};
int main() {
    map<int, int> mp;
    int m, n, tol, cnt = 0, x, y;
    int dirx[8] = {1, 0, -1, 1, -1, 1, 0, -1};
    int diry[8] = {0, -1, 0, -1, 1, 1, 1, -1};
    scanf("%d%d%d", &m, &n, &tol);
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= m; j++) {
            scanf("%d", &a[i][j]);
            mp[a[i][j]]++;
        }
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; j++) {
            bool flag = true;
            if (mp[a[i][j]] != 1) continue;
            for (int k = 0; k < 8; ++k) {
                int u = i + dirx[k], v = j + diry[k];
                if (u < 1 || u > n || v < 1 || v > m) continue;
                if (abs(a[u][v] - a[i][j]) <= tol) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                ++cnt;
                if (cnt > 1) {
                    printf("Not Unique");
                    return 0;
                }
                x = j;
                y = i;
            }
        }
    }
    if (!cnt)
        printf("Not Exist");
    else
        printf("(%d, %d): %d", x, y, a[y][x]);
    return 0;
}

總結(jié):

1、題干“8”個(gè)方向應(yīng)該是坑人的,邊界也有所求點(diǎn),并不需要算滿8個(gè)方向
2、沒有寫dirx,diry也可以在寫兩個(gè)for循環(huán),也可以單獨(dú)寫個(gè)函數(shù)列滿8個(gè)方向,后者清晰,前者我寫了自己看著都難受,畢竟套了四個(gè)for循環(huán)
3、網(wǎng)上有補(bǔ)一圈零不判斷邊界的做法,感覺有點(diǎn)問題哈,但貌似也能過?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 文/ 小婷半清 1. 傍晚的城市,總是格外擁擠,秦夏在公交車上,拉著把手,勉強(qiáng)地站著??粗巴獯鞑幌⒌能囕v、面目...
    小婷半清閱讀 2,102評論 114 108
  • 斷的干凈 承受不了這樣的壓力
    異次元小辣椒閱讀 191評論 0 0
  • 孟浩宇 自從兔子輸給烏龜后,很不服氣,一天到晚都在練習(xí)跑步。 不久,新一屆的運(yùn)動(dòng)會(huì)開始了,烏龜和兔子又來參賽?!斑@...
    z橄欖樹閱讀 459評論 0 0

友情鏈接更多精彩內(nèi)容