2013 ACM/ICPC Asia Regional Changsha Online–C (模拟)
题目描述
略。。。
题解
注意控制精度即可。。。。变量全部定义成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 (模拟)的更多相关文章
- 2013 ACM/ICPC Asia Regional Changsha Online - C Color Representation Conversion
这个纯粹是一个细节题啊!!! 由于某个地方的浮点数比较写错了,WA了无数次啊…… 代码如下: #include<iostream> #include<cstdio> #incl ...
- 2013 ACM/ICPC Asia Regional Changsha Online G Goldbach
比赛的时候,被题目误导了,题目最后说结果可能很大,要取模,那时就想直接求会TLE的!!! 赛后才知道,坑啊………… 代码如下: #include<iostream> #include< ...
- 2013 ACM/ICPC Asia Regional Changsha Online - G(DP)
第一眼就想到DP,然后想了N久就想不到可以不重算的DP 最后没办法了 先算出来 再去重.. 因为最多只有三个 对于三个来说有三种组合情况 x+y+z, x*y*z, x*y+z 那要么 x,y,z都 ...
- 2013 ACM/ICPC Asia Regional Changsha Online - E
第一个被板刷的题 取余 依次算在周几 #include <iostream> #include<cstdio> #include<cstring> #include ...
- 2013 ACM/ICPC Asia Regional Changsha Online J Candies
AC了,但是不知道为什么,但是恶心的不得了~最近写代码,思路都非常清晰,但是代码各种bug~T.T~说说思路吧:二分~330ms~ 小队友fribbi的思路是离线250msAC~ 预处理solve函数 ...
- 2013 ACM/ICPC Asia Regional Changsha Online – C题 Color Representation Conversion (坑爹模拟题)
题意:给你三种颜色表示模式,RGB,HSV和HSL,实现任意模式之间两两转化. 1.最好别看题目中给的转化公式描述,我觉得叙述的一点也不清楚,看维基百科,把维基百科上的公式一句一句翻译过来就好 2.在 ...
- 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] ...
- 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 ...
- 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 ...
随机推荐
- uCGUI字符串显示过程分析和uCGUI字库的组建
为什么要分析字符串的显示过程? 学习uCGUI主要是学习如何使用的,为何要深究到源码的层次呢? 就分析字符串显示过程的原因来说,是因为移植汉字字库的需要.uCGUI并么有合适的汉字字库,而且完整的汉字 ...
- <四> SQL存储过程
存储过程的定义: create procedure procedurename @param1 nvarchar(30) as select * from tablename where name = ...
- JSP页面之${fn:}内置函数
函数列表: 函数名 函数说明 使用举例 fn:contains 判断字符串是否包含另外一个字符串 <c:if test="${fn:contains(name, searchStrin ...
- python里面的几个编码函数
时不时的被编码折腾一下 >>> print urllib.quote('中国') %E4%B8%AD%E5%9B%BD >>> s = '%E4%B8%AD%E5% ...
- hex(x) 将整数x转换为16进制字符串
>>> a = 122 >>> b = 344 >>> c = hex(a) >>> d = hex(b) >>&g ...
- BIOS
转自BIOS BIOS(Basic Input/Output System的缩写.中文:基本输入输出系统),在IBM PC兼容机上,是一种业界标准的固件接口.BIOS这个字眼是在1975第一次由CP/ ...
- 李洪强漫谈iOS开发[C语言-017]-printf函数
- SQLite Version3.3.6源代码文件结构
Version 3.3.6源代码文件结构 ——整理:hustcat 2009-2-19 文件名称 大小by ...
- QStringRef可以提高性能,下次注意使用;QPair方便了语法,函数可以一次返回多个返回值,方便使用
而且QPair从此与各种QMap容器联系了起来,会非常好用.甚至QList也可以成双成对的使用元素了: QList<QPair<int, double> > list;list ...
- 创建安卓app的30个经验教训
在添加任何第三方party之前,请三思:这真的是一个成熟的项目吗? 如果一个东西用户看不到,就不要绘制它! 除非真的需要,否则别使用数据库: 达到65k方法数限制来的非常快,真的,非常快!不过 mul ...