Brian Warehouse

Some birds aren`t meant to be caged, their feathers are just too bright... ...
posts - 40, comments - 16, trackbacks - 0, articles - 1

POJ 1046 Color Me Less

Posted on 2010-08-18 01:00 Brian 阅读(405) 评论(0)  编辑 收藏 引用 所属分类: POJ
唉,半年没有切题的后果就是这道水题写了整整3个小时。。。

题目的要求是输入若干组颜色数据,前16组是目标组,后面剩下的都是用来尝试与其映射的,用后面与前面的一次匹配,各循环16次,各自最小的D的相应映射组就是我们要的结果。

C++ 编译器 ,220K  0MS
#include<iostream>
#include
<climits> // 为第一组数据运算做的约束
using namespace std;  
int RGB[16][3],in[3],out[3]; // in 用来接收数据, out 用来暂存映射正确的数据

int main(){ 
    
for (int i=0; i<16; i++// 输入的数据中前16组是 target set
        cin>>RGB[i][0]>>RGB[i][1]>>RGB[i][2]; 
    
while (1) { 
        cin
>>in[0]>>in[1]>>in[2]; // 开始接收映射组
        if (in[0== -1break;
        
int MIN=INT_MAX; // 2147483647
        for (int i=0; i<16; i++) { 
            
int sum=(RGB[i][0]-in[0])*(RGB[i][0]-in[0])+
                (RGB[i][
1]-in[1])*(RGB[i][1]-in[1])+
                (RGB[i][
2]-in[2])*(RGB[i][2]-in[2]); // 不需要开方,开方易产生误差
            if (sum < MIN) { 
                
out[0]=RGB[i][0]; 
                
out[1]=RGB[i][1]; 
                
out[2]=RGB[i][2]; 
                MIN
=sum; // 最小的即映射成功
            } 
        } 
        cout
<<"("<<in[0]<<","<<in[1]<<","<<in[2]<<") maps to ("
            
<<out[0]<<","<<out[1]<<","<<out[2]<<")"<<endl;  
    }
    
return 0;
}

有一点要说明的是<limits.h>头文件,建议MSDN一下,你会发现很多有用的常量,拿来就能用。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理