ZOJ 1067 题目大意:hiahiahiahia~如下所示~
2016-01-23 12:33
363 查看
Problem
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
The input file 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.
Example
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
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)
代码如下:
#include <iostream>
using namespace std;
struct Cor
{
int r;
int g;
int b;
};
Cor a[17];
int dist(Cor a, Cor b)
{
return (a.r-b.r) * (a.r-b.r) +
(a.g-b.g) * (a.g-b.g) +
(a.b-b.b) * (a.b-b.b);
}
int main()
{
int i;
for (i = 1; i <= 16; i++)
cin >> a[i].r >> a[i].g >> a[i].b;
Cor color;
Cor nearest;
int min;
int dis;
cin >> color.r >> color.g >> color.b;
while (color.r != -1)
{
min = 65535;
for (i = 1; i <= 16; i++)
{
dis = dist(color, a[i]);
if (min > dis)
{
min = dis;
nearest = a[i];
}
}
cout <<"("<<color.r<<","<<color.g<< ",";
cout <<color.b << ") maps to (" << nearest.r << ",";
cout << nearest.g << "," << nearest.b << ")" << endl;
cin >> color.r >> color.g >> color.b;
}
return 0;
}
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
The input file 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.
Example
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
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)
代码如下:
#include <iostream>
using namespace std;
struct Cor
{
int r;
int g;
int b;
};
Cor a[17];
int dist(Cor a, Cor b)
{
return (a.r-b.r) * (a.r-b.r) +
(a.g-b.g) * (a.g-b.g) +
(a.b-b.b) * (a.b-b.b);
}
int main()
{
int i;
for (i = 1; i <= 16; i++)
cin >> a[i].r >> a[i].g >> a[i].b;
Cor color;
Cor nearest;
int min;
int dis;
cin >> color.r >> color.g >> color.b;
while (color.r != -1)
{
min = 65535;
for (i = 1; i <= 16; i++)
{
dis = dist(color, a[i]);
if (min > dis)
{
min = dis;
nearest = a[i];
}
}
cout <<"("<<color.r<<","<<color.g<< ",";
cout <<color.b << ") maps to (" << nearest.r << ",";
cout << nearest.g << "," << nearest.b << ")" << endl;
cin >> color.r >> color.g >> color.b;
}
return 0;
}
相关文章推荐
- CHM文档打开空白的解决
- 标准格式输出时间差
- leetcode1 Two Sum
- mac office 2016 破解版地址
- Memcached缓存无底洞现象
- 我一生中认识的那些人,那些事。(二)
- Android UI性能优化详解
- 排列组合
- 逻辑回归 算法 理论
- 不重新定义继承而来的缺省参数值
- FIXED_WIDTH下cocos怎么截屏的
- 客户端错误日志收集方法及系统
- 递归练习
- UI控件
- Android数字签名解析(三)
- HTML5 input placeholder 颜色 改动
- Source Insight与Pclint集成开发安装关键步骤
- 高性能服务器框架--I/O模型
- 2016回到重庆的对互联网的感想
- 【Android】项目常用功能集锦(一)