题目描述

略。。。

题解

注意控制精度即可。。。。变量全部定义成double,结果round就行。。。。妈蛋。。。。被这题目恶心死了。。。。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
using namespace std;
#define ESP 1e-15
double sl,sv,v,l,r,g,b,h;
void HSV_RGB()
{
double c,hh,m,g1,b1,r1,x;
c=v*sv;
hh=h/60.0;
x=c*(1-fabs(fmod(hh,2)-1));
if(hh+ESP<1) r1=c,g1=x,b1=0;
else if(hh+ESP<2) r1=x,g1=c,b1=0;
else if(hh+ESP<3) r1=0,g1=c,b1=x;
else if(hh+ESP<4) r1=0,g1=x,b1=c;
else if(hh+ESP<5) r1=x,g1=0,b1=c;
else r1=c,g1=0,b1=x;
m=v-c;
r=(r1+m)*255.0;
g=(g1+m)*255.0;
b=(b1+m)*255.0;
}
void HSL_RGB()
{
double c,hh,m,g1,b1,r1,x;
c=(1-fabs(2*l-1))*sl;
hh=h/60.0;
x=c*(1-fabs(fmod(hh,2)-1));
if(hh+ESP<1) r1=c,g1=x,b1=0;
else if(hh+ESP<2) r1=x,g1=c,b1=0;
else if(hh+ESP<3) r1=0,g1=c,b1=x;
else if(hh+ESP<4) r1=0,g1=x,b1=c;
else if(hh+ESP<5) r1=x,g1=0,b1=c;
else r1=c,g1=0,b1=x;
m=l-0.5*c;
r=(r1+m)*255.0;
g=(g1+m)*255.0;
b=(b1+m)*255.0;
}
void RGB_HSV_HSL()
{
double r1,g1,b1,maxs,mins;
r1=r/255.0;
g1=g/255.0;
b1=b/255.0;
maxs=max(max(r1,g1),b1);
mins=min(min(r1,g1),b1);
if(maxs==mins)
h=0;
else if(maxs==r1&&g1>=b1)
h=60.0*(g1-b1)/(double)(maxs-mins);
else if(maxs==r1&&g1<b1)
h=60.0*(g1-b1)/(double)(maxs-mins)+360;
else if(maxs==g1)
h=60.0*(b1-r1)/(double)(maxs-mins)+120;
else if(maxs==b1)
h=60.0*(r1-g1)/(double)(maxs-mins)+240;
l=0.5*(maxs+mins);
if(fabs(l)<ESP||maxs==mins) sl=0;
else if(l>ESP&&l<0.5+ESP)
sl=(maxs-mins)/2/l;
else
sl=(maxs-mins)/(2-(maxs+mins));
if(fabs(maxs)<ESP)
sv=0;
else
sv=1-mins/maxs;
v=maxs;
}
int main()
{
string s1,s2;
while(cin>>s1)
{
cin>>s2;
if(s1=="RGB")
{
if(s2=="HSL")
{
char ch1,ch2;
scanf("%lf%lf%c%lf%c",&h,&sl,&ch1,&l,&ch2);
sl/=100.0;
l/=100.0;
HSL_RGB();
printf("RGB %.0lf %.0lf %.0lf\n",r,g,b);
}
else if(s2=="HSV")
{
char ch1,ch2;
scanf("%lf%lf%c%lf%c",&h,&sv,&ch1,&v,&ch2);
sv/=100.0;
v/=100.0;
HSV_RGB();
printf("RGB %.0lf %.0lf %.0lf\n",r,g,b);
}
else
{
scanf("%lf%lf%lf",&r,&g,&b);
printf("RGB %.0lf %.0lf %.0lf\n",r,g,b);
}
}
else if(s1=="HSL")
{
if(s2=="RGB")
{
scanf("%lf%lf%lf",&r,&g,&b);
RGB_HSV_HSL();
double ss=sl*100.0;
double ll=l*100.0;
printf("HSL %.0lf %.0lf%% %.0lf%%\n",h,ss,ll);
}
else if(s2=="HSV")
{
char ch1,ch2;
scanf("%lf%lf%c%lf%c",&h,&sv,&ch1,&v,&ch2);
sv/=100.0;
v/=100.0;
HSV_RGB();
RGB_HSV_HSL();
double ss=sl*100.0;
double ll=l*100.0;
printf("HSL %.0lf %.0lf%% %.0lf%%\n",h,ss,ll);
}
else
{
char ch1,ch2;
scanf("%lf%lf%c%lf%c",&h,&sl,&ch1,&l,&ch2);
printf("HSL %.0lf %.0lf%% %.0lf%%\n",h,sl,l);
}
}
else
{
if(s2=="RGB")
{
scanf("%lf%lf%lf",&r,&g,&b);
RGB_HSV_HSL();
double ss=sv*100.0,vv=v*100.0;
printf("HSV %.0lf %.0lf%% %.0lf%%\n",h,ss,vv);
}
else if(s2=="HSV")
{
char ch1,ch2;
scanf("%lf%lf%c%lf%c",&h,&sv,&ch1,&v,&ch2);
printf("HSV %.0lf %.0lf%% %.0lf%%\n",h,sv,v);
}
else
{
char ch1,ch2;
scanf("%lf%lf%c%lf%c",&h,&sl,&ch1,&l,&ch2);
sl/=100.0;
l/=100.0;
HSL_RGB();
RGB_HSV_HSL();
double ss=sv*100.0,vv=v*100.0;
printf("HSV %.0lf %.0lf%% %.0lf%%\n",h,ss,vv);
}
}
}
return 0;
}

2013 ACM/ICPC Asia Regional Changsha Online–C (模拟)的更多相关文章

  1. 2013 ACM/ICPC Asia Regional Changsha Online - C Color Representation Conversion

    这个纯粹是一个细节题啊!!! 由于某个地方的浮点数比较写错了,WA了无数次啊…… 代码如下: #include<iostream> #include<cstdio> #incl ...

  2. 2013 ACM/ICPC Asia Regional Changsha Online G Goldbach

    比赛的时候,被题目误导了,题目最后说结果可能很大,要取模,那时就想直接求会TLE的!!! 赛后才知道,坑啊………… 代码如下: #include<iostream> #include< ...

  3. 2013 ACM/ICPC Asia Regional Changsha Online - G(DP)

    第一眼就想到DP,然后想了N久就想不到可以不重算的DP  最后没办法了 先算出来 再去重.. 因为最多只有三个 对于三个来说有三种组合情况 x+y+z, x*y*z, x*y+z 那要么 x,y,z都 ...

  4. 2013 ACM/ICPC Asia Regional Changsha Online - E

    第一个被板刷的题 取余 依次算在周几 #include <iostream> #include<cstdio> #include<cstring> #include ...

  5. 2013 ACM/ICPC Asia Regional Changsha Online J Candies

    AC了,但是不知道为什么,但是恶心的不得了~最近写代码,思路都非常清晰,但是代码各种bug~T.T~说说思路吧:二分~330ms~ 小队友fribbi的思路是离线250msAC~ 预处理solve函数 ...

  6. 2013 ACM/ICPC Asia Regional Changsha Online – C题 Color Representation Conversion (坑爹模拟题)

    题意:给你三种颜色表示模式,RGB,HSV和HSL,实现任意模式之间两两转化. 1.最好别看题目中给的转化公式描述,我觉得叙述的一点也不清楚,看维基百科,把维基百科上的公式一句一句翻译过来就好 2.在 ...

  7. 2013 ACM/ICPC Asia Regional Changsha Online - J

    原题戳这里. 题意: 有一未知列数a1,a2,a3.....an, 已知s[i]=a[i-1]+a[i]+a[i]  (1<i<n) s[1]=a[1]+a[2]; s[n]=a[n-1] ...

  8. hduoj 4710 Balls Rearrangement 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4710 Balls Rearrangement Time Limit: 6000/3000 MS (Java/Ot ...

  9. hduoj 4708 Rotation Lock Puzzle 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4708 Rotation Lock Puzzle Time Limit: 2000/1000 MS (Java/O ...

随机推荐

  1. Java基础知识学习

    1.什么是Java编程语言 Java是:一种编程语言.一种开发环境.一种应用环境.一种部署环境 2.Java编程语言的主要目标 (1)提供一种解释环境为:提高开发速度.代码可移植性.使用户能运行不止一 ...

  2. NGUI系列教程四(自定义Atlas,Font)

    今天我们来看一下怎么自定义NGUIAtlas,制作属于自己风格的UI.第一部分:自定义 Atlas1 . 首先我们要准备一些图标素材,也就是我们的UI素材,将其导入到unity工程中.2. 全选我们需 ...

  3. Interface和Abstract class区别

    在面向对象中,Interface和Abstract class是实现抽象类定义的两种机制. 1.声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本 ...

  4. Provider Communication with Apple Push Notification Service

    This chapter describes the interfaces that providers use for communication with Apple Push Notificat ...

  5. loadmore & scroll

    loadmore <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0.1/jquery.m ...

  6. Ubuntu 14.04 开启启动器图标最小化功能

    转自Ubuntu 14.04 怎样开启启动器图标最小化功能 前本站报道过 Ubuntu 14.04 终于加入了启动器图标最小化功能,这个功能默认是不开启的,要怎么开启呢? 之前报道的原文阅读:Ubun ...

  7. easyui源码翻译1.32--ValidateBox(验证框)

    前言 使用$.fn.validatebox.defaults重写默认值对象.下载该插件翻译源码 validatebox(验证框)的设计目的是为了验证输入的表单字段是否有效.如果用户输入了无效的值,它将 ...

  8. *[topcoder]TheTree

    http://community.topcoder.com/stat?c=problem_statement&pm=12746&rd=15703 这道题有意思.给了树的根和每层节点的个 ...

  9. 如何忽略usb host 模式设备连接确认对话框

    <li class="alt"><span><span>package android.hardware.usb;  </span> ...

  10. USB Type-C接口完美无瑕?小心这五点

    今年下半年发布的新手机中,采用USB Type-C接口与传统micro USB接口的手机,所占比例大概是一半对一半.采用Type-C接口的手机大多数都是国产手机,而像三星.摩托罗拉以及索尼等老牌的手机 ...