1068. 万绿丛中一点红(20)

题目链接

题目:

对于计算机而言,颜色不过是像素点对应的一个24位的数值。现给定一幅分辨率为MxN的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的颜色与其周围8个相邻像素的颜色差充分大。

输入格式:

输入第一行给出三个正整数,分别是M和N(<= 1000),即图像的分辨率;以及TOL,是所求像素点与相邻点的颜色差阈值,色差超过TOL的点才被考虑。随后N行,每行给出M个像素的颜色值,范围在[0, 224)内。所有同行数字间用空格或TAB分开。

输出格式:

在一行中按照“(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:
(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

题解:

这道题几次理解错题意。。。PAT有点略坑啊。有以下几点需要注意:

1.独一无二的像素点必须得比周围八个值都大才行,也就是说边缘的必定不是,而且这里的“颜色差充分大”是指当前值比周围值更大,而不是绝对值大于某个数(TOL);

2.该点必须独一无二,也就是矩阵中没有其他点与之相同。

3.以上两点可能还有地方没理解对。。

下面贴一个别人的AC代码


代码:

#include <cstdio>
#include <vector>
#include <map>
using namespace std;
int m, n, tol;
vector<vector<int>> v;
int dir[8][2] = {{-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}};
bool judge(int i, int j) {
    for (int k = 0; k < 8; k++) {
        int tx = i + dir[k][0];
        int ty = j + dir[k][1];
        if (tx >= 0 && tx < n && ty >= 0 && ty < m && v[i][j] - v[tx][ty] >= 0 - tol && v[i][j] - v[tx][ty] <= tol) return false;
    }
    return true;
}
int main() {
    int cnt = 0, x = 0, y = 0;
    scanf("%d%d%d", &m, &n, &tol);
    v.resize(n, vector<int>(m));
    map<int, int> mapp;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d", &v[i][j]);
            mapp[v[i][j]]++;
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (mapp[v[i][j]] == 1 && judge(i, j) == true) {
                cnt++;
                x = i + 1;
                y = j + 1;
            }
        }
    }
    if (cnt == 1)
        printf("(%d, %d): %d", y, x, v[x-1][y-1]);
    else if (cnt == 0)
        printf("Not Exist");
    else
        printf("Not Unique");
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常高兴能够帮您回答这个问题。 以下是我为您生成的五十首赞美秋天的七言绝句: 1. 秋来莫忘山水情,万木丛中鹤舞翎。 2. 秋啸凉风瑟瑟起,满地黄叶舞纷飞。 3. 远山如翠翁媚女,晴日似火映池塘。 4. 高处秋风瑟瑟微,霜华铺洒夜漫漫。 5. 瑶草含香秋霁日,流水潺湲夕阳时。 6. 银霜凋零水痕迹,极目苍茫日色移。 7. 江畔秋色画屏障,瑞雪凝冰月色寒。 8. 西园枫叶红似火,战士扬帆起故乡。 9. 常山太行红叶合,小蹄八哥迎秋归。 10. 林莽苍茫秋色起,万里千翠遂相宜。 11. 望稗山黄叶缤纷,飞燕穿林相与闲。 12. 烟波画楼秋色秀,故园扶疏木叶红。 13. 天绮飘风落叶残,大雁南飞怀故园。 14. 草黄花落燕归时,碧峰如翠晓凝眸。 15. 岁华虚度秋芳散,北风吹瘦水声喧。 16. 野径穿过山峦远,夕阳西下九秋寒。 17. 朱雀祠前今夜月,夜半钟声到客船。 18. 风拂枫林叶落红,凉风习习思归人。 19. 晨露滋新落莲叶,寒鸦鸣道秋日归。 20. 飞花落醉斜阳里,寒鸭穿村暮色归。 21. 洛阳汴河秋色利,鸟翅泛落远山起。 22. 瑶池仙客居桂林,砧杵成婚秋色深。 23. 金秋送夕阳未央,碧浪潮生深巷扬。 24. 清风吹绕涟漪碧,江水东流月份扬。 25. 清秋遐想近高楼,情绪铺零催白头。 26. 纤云一缕映山岚,古木参差耐啜寒。 27. 天清波平闲望外,叠岸嫣然依水栏。 28. 彩斑随风楼台影,流水莹莹屋漏闻。 29. 古庙属墟芝兰香,风摆莲叶舞长江。 30. 峰回路转秋风怒,借杯酒旧追忆中。 31. 风举葱翠东海岸,夕阳余晖激浪滔。 32. 燕归花尽钟声绝,愁闻鹤舞江南宿。 33. 青松翠柏树峰抱,碧水涟漪雁阵拂。 34. 芙蓉如鬟玉如许,片片残红映衣裾。 35. 铁衣飘动追秋色,酒肆歇脚种菊中。 36. 秋韵萧疏绿苔红,簇簇霜草飞古空。 37. 汀洲秋梦碧波里,细雨横风两相依。 38. 招隐飞来碧水瀑,高枝古韵秋花蓝。 39. 喜虞九日起莲池,干树苍苔带泉痕。 40. 窗前秋雨细如丝,愁思万千寄江碧。 41. 翠峰定眸凝秋水,陇头群鹿美晴天。 42. 光风草露思潇洒,假山山水尽秋色。 43. 芳洲木兰映水影,青峰紫霄涌秋意。 44. 碧瓦朱楼临水寺,红于滩渡碧莙垂。 45. 秋光秦楼黄叶路,山色空闺独卧时。 46. 珠泉琼舞愁惆怅,古涧河声激春光。 47. 金陵庙里翠微红,飞鸟牵引远云漾。 48. 山涧清来隐鹭声,千古风流月廿四。 49. 小舟随转金山谷,百鸟鸣歇云峰起。 50. 风急铜驼万里辰,落叶千层故乡知。 希望我的回答能够满足您的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值