Color Me Less
Time Limit: 1000MS
|
|
Memory Limit: 10000K
|
Total Submissions: 18730
|
|
Accepted: 8886
|
Description
A color reduction is a mapping from a set of discrete colors to a smaller one. The solution to this problem requires that you perform just such a mapping in a standard twenty-four bit RGB color space. The input consists of a target set of sixteen RGB color values, and a collection of arbitrary RGB colors to be mapped to their closest color in the target set. For our purposes, an RGB color is defined as an ordered triple (R,G,B) where each value of the triple is an integer from 0 to 255. The distance between two colors is defined as the Euclidean distance between two three-dimensional points. That is, given two colors (R1,G1,B1) and (R2,G2,B2), their distance D is given by the equation
Input
The input is a list of RGB colors, one color per line, specified as three integers from 0 to 255 delimited by a single space. The first sixteen colors form the target set of colors to which the remaining colors will be mapped. The input is terminated by a line containing three -1 values.
Output
For each color to be mapped, output the color and its nearest color from the target set.
If there are more than one color with the same smallest distance, please output the color given first in the color set.
Sample Input
0 0 0
255 255 255
0 0 1
1 1 1
128 0 0
0 128 0
128 128 0
0 0 128
126 168 9
35 86 34
133 41 193
128 0 128
0 128 128
128 128 128
255 0 0
0 1 0
0 0 0
255 255 255
253 254 255
77 79 134
81 218 0
-1 -1 -1
Sample Output
(0,0,0) maps to (0,0,0)
(255,255,255) maps to (255,255,255)
(253,254,255) maps to (255,255,255)
(77,79,134) maps to (128,128,128)
(81,218,0) maps to (126,168,9)
Source
Greater New York 2001
先读懂题意:
很简单,就是给定一个三维点以及一个由16个三维点组成的点集,求这个给定三维点与点集中哪个三维坐标点的距离最小。
基本思路:
就是模拟题啦,照着题意做就行。
代码如下:
#include <iostream>
#include <cmath>
int R[16], G[16], B[16];
void mapping(int r, int g ,int b)
{
long diff;
int flag;
int min = 255*3 + 1;
for(int i=0; i<16; i++)
{
//diff = abs(r-R[i])+abs(g-G[i])+abs(b-B[i]); WA??
//这里很诡异,我简化成求绝对值的和,提交后居然是WA,实在搞不懂
//非得要我求平方和之后再开方??
diff = sqrt((double)(r-R[i])*(r-R[i]) + (double)(g-G[i])*(g-G[i]) + (double)(b-B[i])*(b-B[i]));
if(diff < min)
{
min = diff;
flag = i;
}
}
std::cout<<"("<<r<<","<<g<<","<<b<<") maps to "
<<"("<<R[flag]<<","<<G[flag]<<","<<B[flag]<<")"<<std::endl;
}
int main()
{
int r, g, b;
for(int i=0; i<16; i++)
{
std::cin>>R[i]>>G[i]>>B[i];
}
std::cin>>r>>g>>b;
while(r!=-1 || g!=-1 || b!=-1)
{
mapping(r, g, b);
std::cin>>r>>g>>b;
}
system("pause");
return 0;
}
分享到:
相关推荐
初学者练题开始------在POJ上(注:是百练) 初学者练题开始------在POJ上(注:是百练) 初学者练题开始------在POJ上(注:是百练)
算法-青蛙的约会(POJ-1061)(包含源程序).rar
不错的资源 收集了网上的一些解题报告 方便同学们学习参考
poj的结题报告,里面有一些详细的说明。poj的结题报告,里面有一些详细的说明
poj 1028 Web Navigation 的代码,已通过!
POJ 1170 动态规划。欢迎各种交流讨论。
POJ 北大在线代码判断,参考答案请参考
POJ 2151 Check the difficulty of problems. Practice for dynamic planning.
北大POJ2002-Squares 解题报告+AC代码
NULL 博文链接:https://128kj.iteye.com/blog/1705139
poj 1000 - 2000 部分题目 官方分类 poj 1000 - 2000 部分题目 官方分类
leetcode oj 调试
twilight-poj-solutionPOJ () solution by twilight想当年要找一题的分析, 解答实在太难了现在都是开源的时代了, 干脆把Archive放到GitHub上, 供后来人参考.POJ ID: 部分题解: 转载请注明出处~
算法-炮兵阵地(POJ-1185)(包含源程序).rar
算法-开关问题(POJ-1830)(包含源程序).rar
这是我个人写的POJ上2314题的Java实现,希望对喜欢ACM的人有帮助
pku acm 第3356题 AGTC Java代码,有详细的注释,动态规划
北大POJ3253-POJ3253-Fence Repair【STL优先队列】 解题报告+AC代码
北大POJ1080-Human Gene Functions POJ1080-Human Gene Functions
西北工业大学-c语言-POJ-题目及答案-第七季.doc