您的位置:首页 > 其它

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: