POJ 1046

#include <iostream>
#include <stdio.h>
using namespace std;
int main(){
	int r[16],g[16],b[16];
	for (int i=0; i<16; i++) {
		cin >> r[i] >> g[i] >> b[i];
	}
	int rr,gg,bb;
	while (cin >> rr >> gg >> bb) {
		if (rr==-1 && gg==-1 && bb==-1) break;
		int d2,mind2=256*256*256,mini=0;
		for (int i=0;i<16;i++) {
			d2 = ((r[i]-rr)*(r[i]-rr)+(g[i]-gg)*(g[i]-gg)+(b[i]-bb)*(b[i]-bb));
			if (d2<mind2) {mind2=d2;mini=i;}
		}
		printf("(%d,%d,%d) maps to (%d,%d,%d)\n", rr,gg,bb,r[mini],g[mini],b[mini]);
	}
	return 0;
}

最小のユークリッド距離を求める.
最小値さえ分かればよいので,平方根をとる必要はない.
特につまったところはなかった.