zoukankan      html  css  js  c++  java
  • 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
    ",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
    ",r,g,b);
                }
                else
                {
                    scanf("%lf%lf%lf",&r,&g,&b);
                    printf("RGB %.0lf %.0lf %.0lf
    ",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%%
    ",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%%
    ",h,ss,ll);
                }
                else
                {
                    char ch1,ch2;
                    scanf("%lf%lf%c%lf%c",&h,&sl,&ch1,&l,&ch2);
                    printf("HSL %.0lf %.0lf%% %.0lf%%
    ",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%%
    ",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%%
    ",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%%
    ",h,ss,vv);
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    linux服务器NAT后无法在内网通过外部IP访问内部服务的问题
    Centos7离线部署docker
    centos7运维记录文档
    centos7离线部署Patroni
    nginx常用运维日志分析命令
    Ubuntu只读文件系统修复方法
    pm2常用命令
    Expert 诊断优化系列------------------锁是个大角色
    Expert 诊断优化系列------------------给TempDB 降温
    Expert 诊断优化系列------------------透过等待看系统
  • 原文地址:https://www.cnblogs.com/zjbztianya/p/3334514.html
Copyright © 2011-2022 走看看