zoukankan      html  css  js  c++  java
  • 2013 ACM/ICPC Asia Regional Changsha Online

    这个纯粹是一个细节题啊!!!

    由于某个地方的浮点数比较写错了,WA了无数次啊……

    代码如下:

      1 #include<iostream>
      2 #include<cstdio>
      3 #include<cmath>
      4 #include<algorithm>
      5 #include<cstring>
      6 using namespace std;
      7 char str1[10],str2[10];
      8 double h,s,l,r,g,b,v;
      9 bool is(double h,double a,double b)
     10 {
     11     if(h-a>=-1e-8&&h-b<1e-8) return 1; //这里忘记加-,一直是WA……
     12     return 0;
     13 }
     14 void v_r()
     15 {
     16     double c=v*s;
     17     double hh=h/60.0;
     18     double x=c*(1-fabs(fmod(hh,2.0)-1.0));
     19     r=g=b=0;
     20     if(is(hh,0,1))r=c,g=x;
     21     else if(is(hh,1,2)) r=x,g=c;
     22     else if(is(hh,2,3)) g=c,b=x;
     23     else if(is(hh,3,4)) g=x,b=c;
     24     else if(is(hh,4,5)) r=x,b=c;
     25     else if(is(hh,5,6)) r=c,b=x;
     26     double m=v-c;
     27     r+=m;
     28     g+=m;
     29     b+=m;
     30 }
     31 void l_r()
     32 {
     33     double c=(1.0-fabs(2.0*l-1.0))*s;
     34     double hh=h/60.0;
     35     double x=c*(1.0-fabs(fmod(hh,2.0)-1.0));
     36     r=g=b=0;
     37     if(is(hh,0,1))r=c,g=x;
     38     else if(is(hh,1,2)) r=x,g=c;
     39     else if(is(hh,2,3)) g=c,b=x;
     40     else if(is(hh,3,4)) g=x,b=c;
     41     else if(is(hh,4,5)) r=x,b=c;
     42     else if(is(hh,5,6)) r=c,b=x;
     43     double m=l-c*0.5;
     44     r+=m;
     45     g+=m;
     46     b+=m;
     47 }
     48 void r_l_v(char c)
     49 {
     50     double ma=max(max(r,g),b);
     51     double mi=min(min(r,g),b),t=ma-mi;
     52     if(ma-mi<1e-8) h=0;
     53     else if(ma-r<1e-8&&g>=b) h=60*(g-b)/t;
     54     else if(ma-r<1e-8&&g<b) h=60*(g-b)/t+360;
     55     else if(ma-g<1e-8) h=60*(b-r)/t+120;
     56     else if(ma-b<1e-8) h=60*(r-g)/t+240;
     57     l=(ma+mi)*0.5;
     58     v=ma;
     59     if(c=='L'){
     60         if(fabs(l)<=1e-8||fabs(t)<=1e-8) s=0;
     61         else if(l-0.5<=1e-8) s=t/2.0/l;
     62         else s=t/(2-2*l);
     63     }
     64     else{
     65         if(fabs(ma)<1e-8) s=0;
     66         else s=1-mi/ma;
     67     }
     68 }
     69 int main()
     70 {
     71     while(scanf("%s",str1)!=EOF){
     72         scanf("%s",str2);
     73         if(str2[2]=='L'){
     74             scanf("%lf %lf%% %lf%%",&h,&s,&l);
     75             if(str1[2]=='L'){
     76                 printf("%s %.0lf %.0lf%% %.0lf%%
    ",str1,h,s,l);
     77                 continue;
     78             }
     79             s/=100;l/=100;
     80             l_r();
     81             if(str1[2]=='B') 
     82                 printf("%s %.0lf %.0lf %.0lf
    ",str1,round(255*r),round(255*g),round(255*b));
     83             else{
     84                 r_l_v('V');
     85                 printf("%s %.0lf %.0lf%% %.0lf%%
    ",str1,h,round(100*s),round(100*v));
     86             }
     87         }
     88         else if(str2[2]=='V'){
     89             scanf("%lf %lf%% %lf%%",&h,&s,&v);
     90             if(str1[2]=='V'){
     91                 printf("%s %.0lf %.0lf%% %.0lf%%
    ",str1,h,s,v);
     92                 continue;
     93             }
     94             s/=100;v/=100;
     95             v_r();
     96             if(str1[2]=='B') 
     97                 printf("%s %.0lf %.0lf %.0lf
    ",str1,round(255*r),round(255*g),round(255*b));
     98             else{
     99                 r_l_v('L');
    100                 printf("%s %.0lf %.0lf%% %.0lf%%
    ",str1,h,round(100*s),round(100*l));
    101             }
    102         }
    103         else if(str2[2]=='B'){
    104             scanf("%lf%lf%lf",&r,&g,&b);
    105             if(str1[2]=='B'){
    106                 printf("%s %.0lf %.0lf %.0lf
    ",str1,r,g,b);
    107                 continue;
    108             }
    109             r/=255;g/=255;b/=255;
    110             if(str1[2]=='L'){
    111                 r_l_v('L');
    112                 printf("%s %.0lf %.0lf%% %.0lf%%
    ",str1,h,round(100*s),round(100*l));
    113             }
    114             else{
    115                 r_l_v('V');
    116                 printf("%s %.0lf %.0lf%% %.0lf%%
    ",str1,h,round(100*s),round(100*v));
    117             }
    118         }
    119     }
    120     return 0;
    121 }
    View Code
  • 相关阅读:
    AJAX MANAGER
    关闭IE浏览器的自动RSS阅读功能
    WCF REST Configuration for ASP.NET AJAX and plain REST Services
    jquery, json与ashx的完美结合
    ASP.NET 页面中的 ValidateRequest属性
    ASP.NET中的healthMonitoring
    GZip Compress SoapExtension
    ASP.NET MVC : UrlHelper
    Microsoft Ajax Content Delivery Network
    ASP.NET: TextBox控件如果设置为ReadOnly则PostBack之后可能丢失数据的问题
  • 原文地址:https://www.cnblogs.com/xin-hua/p/3335640.html
Copyright © 2011-2022 走看看