Color Me Less
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1067
直接贴代码,但是值得思考的是数据量大的时候如何预处理数据使得查询的时间复杂度为1。(也许机器学习行。。。但需要依赖输入的数据)。
1 //Problem Name: Color Me Less 2 //Source: ZOJ 1067 3 //Author: jinjin18 4 //Main idea: FindMin 5 //Language: C++ 6 //水题,数据量大如何处理? 7 //是否可通过线段树类似的途径 8 //确定每个颜色的区间 9 #include<stdio.h> 10 11 12 13 int main(){ 14 int data[16][3]; 15 int r,g,b; 16 for(int i = 0; i < 16; i++){ 17 scanf("%d %d %d",&data[i][0],&data[i][1],&data[i][2]); 18 } 19 while(scanf("%d %d %d",&r,&g,&b)!=EOF&&(r!=-1||g!=-1||b!=-1)){ 20 int mind = (r-data[0][0])*(r-data[0][0])+(g-data[0][1])*(g-data[0][1])+(b-data[0][2])*(b-data[0][2]); 21 int minp = 0; 22 for(int i = 1; i <16; i++){ 23 if(mind > (r-data[i][0])*(r-data[i][0])+(g-data[i][1])*(g-data[i][1])+(b-data[i][2])*(b-data[i][2])){ 24 mind = (r-data[i][0])*(r-data[i][0])+(g-data[i][1])*(g-data[i][1])+(b-data[i][2])*(b-data[i][2]); 25 minp = i; 26 } 27 } 28 printf("(%d,%d,%d) maps to (%d,%d,%d)\n",r,g,b,data[minp][0],data[minp][1],data[minp][2]); 29 30 } 31 32 33 34 return 0; 35 }