这道题看着挺麻烦的。之前写过一个2D的KNN算法,用kd-tree实现的。我以为这个是实现3D的nearest neighbor.看了discuss发现标签是水题之后就知道我想复杂了。其实自己应该有这样的判断力,从要判断的数据个数就应该知道了,target只有16个。
1046 | Accepted | 712K | 0MS | G++ | 1119B |
/*
ID: thestor1
LANG: C++
TASK: poj1046
*/
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <limits>
#include <string>
#include <vector>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <cassert>
using namespace std;
int main()
{
std::vector<std::vector<int> > colors(16, std::vector<int>(3, 0));
for (int i = 0; i < 16; ++i)
{
for (int j = 0; j < 3; ++j)
{
cin >> colors[i][j];
}
}
int x, y, z;
while (true)
{
cin >> x >> y >> z;
if (x == -1)
{
break;
}
int mindis = -1, mini;
for (int i = 0; i < colors.size(); ++i)
{
int dis = (x - colors[i][0]) * (x - colors[i][0]) + (y - colors[i][1]) * (y - colors[i][1]) + (z - colors[i][2]) * (z - colors[i][2]);
if (mindis < 0 || dis < mindis)
{
mindis = dis;
mini = i;
}
}
cout << "(" << x << "," << y << "," << z << ") maps to (" << colors[mini][0] << "," << colors[mini][1] << "," << colors[mini][2] << ")" << endl;
}
return 0;
}