题目描述

略。。。

题解

注意控制精度即可。。。。变量全部定义成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. Logback 简单使用

    1.Logback为取代log4j而生 Logback是由log4j创始人Ceki Gülcü设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback- cl ...

  2. vs2013 上传碰到的问题:“输入的不是有效的 Base-64 字符串 ”

    action 代码: [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create( ImageStoreModels images ...

  3. <一> MVC - HtmlHelper

    HtmlHelper类位于System.Web.Mvc.Html之中主要有七个静态类组成: FormExtensions - BeginForm, BeginRouteForm, EndForm In ...

  4. cocos2dx Tab选项卡控件的实现

    选项卡控件在游戏和应用中很是常见,但是cocostudio里并没有实现好的选项卡控件,于是自己封装了 一个,效果如下: 代码: TabUiControl.h #pragma once //std #i ...

  5. WindowsPhone客户端第一次审核失败记录

    微软返回失败pdf,其中2.7.2和2.7.3没有通过,原因是: 1. 没有提供隐私策略,所以在提交App要填写的隐私策略url里加了隐私策略的网址链接. 2. 由于使用了定位服务,所以第一次进入应用 ...

  6. Pentaho Data Integration笔记 (四):Kitchen

    官方网站: http://wiki.pentaho.com/display/EAI/Kitchen+User+Documentation Kitchen Kitchen是一个可以执行Spoon编辑的J ...

  7. Bengio最新博文:深度学习展望

    Bengio最新博文:深度学习展望 人类一直梦想着创造有智能的机器.早在第一台可编程计算机问世前100多年,发明家就对如何能让由连杆和齿轮组成的设备也变得更加智能这一命题充满好奇.后来,20世纪40年 ...

  8. Codeforces Round #236 (Div. 2)

    A. Nuts time limit per test:1 secondmemory limit per test:256 megabytesinput:standard inputoutput:st ...

  9. Linux内核态抢占机制分析

    http://blog.sina.com.cn/s/blog_502c8cc401012pxj.html [摘要]本文首先介绍非抢占式内核(Non-Preemptive Kernel)和可抢占式内核( ...

  10. SLF4J user manual

    http://www.slf4j.org/manual.html The Simple Logging Facade for Java (SLF4J) serves as a simple facad ...