P1068 万绿丛中一点红
P1068 万绿丛中一点红
转跳点:
1068 万绿丛中一点红 (20分)
对于计算机而言,颜色不过是像素点对应的一个 24 位的数值。现给定一幅分辨率为 M×N 的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的颜色与其周围 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
看完题目就知道这道题目不好惹,样例1都快把我劝退了,数据量又大模拟起来有很麻烦……嗯,他是说颜色吗……嗯好像可以用16进制表示耶。那我就可以把#00FF00之类的拆成3个0~255了
其实吧最近在学H5基础,所以对颜色比较敏感,所谓的颜色差应该是在RGB的三维空间上的空间距离例如 比如65280,也就#00FF00,是绿色, 而65279,#00FEFF,是青色,两者在整数大小上相差1 ,但是颜色有很大区别 幸好(或许也是不幸)在测试用例没有使用上面这样的例子。
还有就是题目存在边界的点符合也就意味得得在边上进行补全
原本是这样子的
#000000 #0000FF ......
#0000FF #0000FF ......
...... ...... ......
要添加成这样子
#000000 #000000 #000000 ......
#000000 #000000 #0000FF ......
#000000 #0000FF #0000FF ......
...... ...... ...... ......
AC代码:
#include <stdio.h>
#include <stdlib.h> #define SQR(X) ((X) * (X))
#define R(COLOR) ((COLOR & 0XFF0000) >> 16)
#define G(COLOR) ((COLOR & 0x00FF00) >> 8)
#define B(COLOR) ((COLOR & 0x0000FF))
#define DISTANCE(C1, C2) (SQR(R(C1) - R(C2)) + SQR(G(C1) - G(C2)) + SQR(B(C1) - B(C2))) //空间内两点距离 int maxtrix[1000][1000];
int isUnique(int x, int y, int x0, int y0); int main(void)
{
int M, N, TOL;
scanf("%d %d %d", &M, &N, &TOL); for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
scanf("%d", &maxtrix[i][j]);
}
} int count = 0, M0, N0; for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{//模拟
if ((i > 0 && j > 0 ? DISTANCE(maxtrix[i][j], maxtrix[i - 1][j - 1]) > SQR(TOL) : 1)
&& (i > 0 ? DISTANCE(maxtrix[i][j], maxtrix[i - 1][j ]) > SQR(TOL) : 1)
&& (i > 0 && j < M ? DISTANCE(maxtrix[i][j], maxtrix[i - 1][j + 1]) > SQR(TOL) : 1)
&& ( j > 0 ? DISTANCE(maxtrix[i][j], maxtrix[i ][j - 1]) > SQR(TOL) : 1)
&& ( j < M ? DISTANCE(maxtrix[i][j], maxtrix[i ][j + 1]) > SQR(TOL) : 1)
&& (i < N && j > 0 ? DISTANCE(maxtrix[i][j], maxtrix[i + 1][j - 1]) > SQR(TOL) : 1)
&& (i < N ? DISTANCE(maxtrix[i][j], maxtrix[i + 1][j ]) > SQR(TOL) : 1)
&& (i < N && j < M ? DISTANCE(maxtrix[i][j], maxtrix[i + 1][j + 1]) > SQR(TOL) : 1)
&& isUnique(N, M, i, j)/*验重函数*/)
{
count++;
N0 = i;
M0 = j;
}
}
} if (count == 0)
{
printf("Not Exist");
}
if (count == 1)
{
printf("(%d, %d): %d", M0 + 1, N0 + 1, maxtrix[N0][M0]);
}
if (count >= 2)
{
printf("Not Unique");
} return 0;
} int isUnique(int x, int y, int x0, int y0)
{
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
if (maxtrix[i][j] == maxtrix[x0][y0] && !(i == x0 && j == y0)/*行列并且值不相等*/)
{
return 0;
}
}
}
return 1;
}
PTA不易,诸君共勉!
P1068 万绿丛中一点红的更多相关文章
- PAT 乙级 1068 万绿丛中一点红(20 分)
1068 万绿丛中一点红(20 分) 对于计算机而言,颜色不过是像素点对应的一个 24 位的数值.现给定一幅分辨率为 M×N 的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的 ...
- PAT 1068 万绿丛中一点红(20)(测试点分析+思路分析)
1068 万绿丛中一点红(20 分) 对于计算机而言,颜色不过是像素点对应的一个 24 位的数值.现给定一幅分辨率为 M×N 的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的 ...
- PAT(B) 1068 万绿丛中一点红(C)
题目链接:1068 万绿丛中一点红 (20 point(s)) 参考博客:1068. 万绿丛中一点红(20) i逆天耗子丶 题目描述 对于计算机而言,颜色不过是像素点对应的一个 24 位的数值.现给定 ...
- PAT 1068 万绿丛中一点红
https://pintia.cn/problem-sets/994805260223102976/problems/994805265579229184 对于计算机而言,颜色不过是像素点对应的一个 ...
- PAT——1068. 万绿丛中一点红
对于计算机而言,颜色不过是像素点对应的一个24位的数值.现给定一幅分辨率为MxN的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的颜色与其周围8个相邻像素的颜色差充分大. 输入 ...
- PAT 1068. 万绿丛中一点红(20)
对于计算机而言,颜色不过是像素点对应的一个24位的数值.现给定一幅分辨率为MxN的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的颜色与其周围8个相邻像素的颜色差充分大. 输入 ...
- 1068 万绿丛中一点红 (20分)C语言
对于计算机而言,颜色不过是像素点对应的一个 24 位的数值.现给定一幅分辨率为 M×N 的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的颜色与其周围 8 个相邻像素的颜色差充 ...
- 【PAT】B1068 万绿丛中一点红(20 分)
一开始因为看见这题就头疼,可费了点时间. 要考虑所有元素,如果忽略外圈元素,最后一个样例过不去. 而且要求只出现一次的元素, 我没有使用map,因为当时还没学,用map储存元素会节约好多代码 #inc ...
- PAT乙级考前总结(四)
散列相关问题 1029 旧键盘 (20 分) 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及实际被输入的文字,请你列出肯定坏掉的那些键. 输入格式: ...
随机推荐
- 中国5G,如何避免重复投资?
前不久,工信部正式向中国移动.中国联通.中国电信发放5G商用牌照,此举意味着中国提前启动5G商用计划,随之而来的,将会是运营商.设备商大规模的投资.相关数据机构预测,三大运营商2019年预计会投入30 ...
- stm32 串口发送字符串丢失第一个字节
使用stm32f103调试串口通讯时,上电后发送的字符串的第一个字节丢失. 发送数据GpuSend("SPG(2);"); 接收端收到的数据为:PG(2);,第一个字符丢失. 出现 ...
- 一堂优秀学员吕智钊分享----HHR计划----直播课第二课
备注:本周四:创业者分享,下周四:投资人分享. 08年开始创业. 最重要的两条复盘思考: 大纲: ---坚持最低成本试错,最快速度学习---- 1,复盘1:创业早期如何快速学习 a,从竞争对手身上学习 ...
- keil遇到hardfault时原因的查找
当硬件仿真遇到hardfault会进入响应的中断软件陷阱中void HardFault_Handler(void),此时通过view-registers中的 1 如果STACK=MSP,则查看SP的堆 ...
- PHP PDO_MYSQL 链式操作 非链式操作类
<?php /* vim: set expandtab tabstop=4 shiftwidth=4: */ // +-------------------------------------- ...
- Maven项目-jar包冲突:MyServlet is not a Servlet解决方法
异常显示:运行时jar包冲突异常 问题所在: jar包冲突,自己导入的jar包与tomcat中的jar包相同. 解决方法: 对(servlet,jsp)jar包设置作用域. 再次启动项目,问题已解决.
- Python 基础之序列化模块pickle与json
一:pickle 序列化模块把不能够直接存储的数据,变得可存储就是序列化把存储好的数据,转化成原本的数据类型,加做反序列化 php: 序列化和反序列化(1)serialize(2)unserializ ...
- redis 之redis发布订阅
Redis 通过 PUBLISH . SUBSCRIBE 等命令实现了订阅与发布模式. 一个Publisher,多个Subscriber模型 如下图所示,可以作为消息队列或者消息通道 主要应用: 一个 ...
- super与this无法用在static方法中
更新记录 [1]2020.02.08-10:32 1.主要编辑了super 正文 我原本是在学习\(super\)关键字,后来突发奇想,能不能在父类中用\(super\)间接调用本类方法呢? 也就是说 ...
- NXP TJA1040, TJA1042, TJA1050 TJA1051, TJA1057, TJA1044, TJA1055区别
历史关系 PCA82C250和PCA82C251是属于NXP第一代 CAN PHY(CAN物理层收发器): TJA1050, TJA1040和TJA1041是属于NXP第二代CAN PHY: TJA1 ...