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 ...
随机推荐
- Python 守护进程
import os import sys from time import sleep try: pid = os.fork() if pid > 0: sys.exit(0) # Exit p ...
- Vijos P1062 迎春舞会之交谊舞
题目链接:https://vijos.org/p/1062 题意:输入n(n <= 1500)个女生左边有多少个男生.每个女生都和她左边最近的男生跳舞. 输出每个女生到可以与之跳舞的男生之间有几 ...
- EventLog组件
1.使用EventLog组件读写事件日志 SourceExists方法 确定事件源是否已在本地计算机上注册 DeleteEventSource方法 用于从事件日志中移除应用程序的事件源注册 pri ...
- 【intellij】异常信息汇总
Application Server was not connected before run configuration stop, reason: javax.management.Instanc ...
- 深度(Depth)概念
强化对深度的理解 在老版本的NGUI中,UI的显示层次关系是依靠z轴进行的.在新版本的NGUI中,所有UI的z轴都被统一,然后用深度来决定和管理显示的层次关系.关于深度,要记住一下关键点: 1.每一个 ...
- 解析Android消息处理机制:Handler/Thread/Looper & MessageQueue
解析Android消息处理机制 ——Handler/Thread/Looper & MessageQueue Keywords: Android Message HandlerThread L ...
- 一个简单的php分页类代码(转载)
入门级php分页类 原文地址:http://www.xfcodes.com/php/fenye/3608.htm 时间:2015-12-16 20:52:00来源:网络 php分页类. 复制代码代码如 ...
- Python PIL库之Image注解(API)
http://blog.csdn.net/xiezhiyong3621/article/details/8499543 class Image Methods defined here: __geta ...
- 练习--LINUX进程间通信之无名管道PIPE
IBM上放的这个系统不错,刚好可以系统回温一下LINUX的系统知识. http://www.ibm.com/developerworks/cn/linux/l-ipc/part1/ 感觉年纪大了,前几 ...
- ANDROID_MARS学习笔记_S01原始版_019_SERVICE之Transact
一.代码1.xml(1)activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/ ...