日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2013 ACM/ICPC Asia Regional Changsha Online - C

發布時間:2023/12/19 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2013 ACM/ICPC Asia Regional Changsha Online - C 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

竟然沒寫出來 還是比較坑,好吧

?Color Representation Conversion

Time Limit: 1 Second Memory Limit: 32768 KB

So far, there are many color models in different area. For screen display, the most popular model is RGB color model. A color in the RGB color model is described indicating how much of each of the red, green, and blue is included. So one can easily determined a color by an RGB triplet (r, g, b). But there are other representation of the points in RGB color model,HSL and HSV are the two most popular representations among them and widely used in color pickers and in image editing software. They also use a triple (h,s,l) or (h,s,v) to determine a color but each component are with different meanings. each channel in HSL stands for hue, saturation, and lightness and in HSV stands for hue, saturation, and value. Note that while "hue" in HSL and HSV refers to the same attribute, their definitions of "saturation" differ dramatically.

For RGB triplet, we use digital 8-bit per channel notation, so the r,g,b can vary from 0 to 255. If all the components are at zero the result is black; if all are at maximum, the result is the brightest representable white.

For HSV and HSL, the hue channel is in unit of degrees, its value vary from 0 to 360(exclusive), and the saturation, lightness and value channel use percentage notation and their value vary from 0% to 100%.

For more detail about the RGB model and these representations, you can refer to HERE .

The problem here is ask you to implement a color representation conversion procedure to convert the representation between RGB,HSL and HSV following the methods below. Or you can find more detail of the converting method in HERE .

Converting HSV to RGB

Given a color with hue H ∈ [0°, 360°), saturation SHSV ∈ [0, 1], and value V ∈ [0, 1], we first find chroma:

Then we can find a point (R1, G1, B1) along the bottom three faces of the RGB cube, with the same hue and chroma as our color (using the intermediate value X for the second largest component of this color):

Finally, we can find R, G, and B by adding the same amount to each component, to match value:

Converting HSL to RGB

Given an HSL color with hue H ∈ [0°, 360°), saturation SHSL ∈ [0, 1], and lightness L ∈ [0, 1], we can use the same strategy. First, we find chroma:

Then we can, again, find a point (R1, G1, B1) along the bottom three faces of the RGB cube, with the same hue and chroma as our color (using the intermediate value X for the second largest component of this color):

Finally, we can find R, G, and B by adding the same amount to each component, to match lightness:

Convert RGB to HSL and HSV

First unify (r, g, b) into a number between 0 and 1. Let max equals to the maximum value in r, g and b. Let min equals to the minimum value in r, g and b. The HSL is with hue h ∈ [0°, 360°), saturation s ∈ [0, 1], and lightness l ∈ [0, 1]


When max = min, h is defined as 0.

HSL and HSV have the same definition of hue. The s and v value in HSV is defined as follows:


Input

There are multiple cases in input. The first line of each case is name of the target representation which you need to convert to. The second line is the representation of the color. It could one of the RGB representation "RGBrgb"(0 ≤r,g,b≤ 255), or HSL representation "HSLhs%l%"(0 ≤h< 360; 0 ≤s,l≤ 100), or HSV representation "HSVhs%v%"(0 ≤h< 360; 0 ≤s,v≤ 100). Please note that all numeric value is integer.

Output

For each case, output the color representation in format of target representation. Each numeric value should round to nearest integer. See sample for more information.

Sample Input

HSL RGB 174 82 144 HSV HSL 62 80% 83% RGB HSV 324 56% 71%

Sample Output

HSL 320 36% 50% HSV 62 28% 97% RGB 181 80 140

#include <iostream> #include <string.h> #include <math.h> #include <stdio.h> using namespace std; char f[5], t[5], rgb[5]; double h, sl ,sv, l, v, r, g, b; double c, ht, x, m, r1, g1, b1, ma, mi; void hsv2rgb(){//cout<<v<<"v s "<<s<<endl;c=v*sv;ht=h/60;x=c*(1-fabs(((((int)(ht*100000))%200000)*1.0)/100000 - 1));//cout<<"ht "<<ht<<endl;if(0<=ht && ht<1){r1=c;g1=x;b1=0;}else if(1<=ht && ht<2){r1=x;g1=c;b1=0;}else if(2<=ht && ht<3){r1=0;g1=c;b1=x;}else if(3<=ht && ht<4){r1=0;g1=x;b1=c;}else if(4<=ht && ht<5){r1=x;g1=0;b1=c;}else if(5<=ht && ht<6){r1=c;g1=0;b1=x;}else {r1=0;g1=0;b1=0;}m=v-c;/* r=(r1+m)*255;g=(g1+m)*255;b=(b1+m)*255;*/r=(r1+m);g=(g1+m);b=(b1+m); } void hsl2rgb(){c=(1-fabs(2*l-1))*sl;// cout<<"c: "<<c<<endl;ht=h/60;x=c*(1-fabs(((((int)(ht*100000))%200000)*1.0)/100000 - 1));// cout<<"ht: "<<ht<<endl;//cout<<"x"<<x<<endl;if(0<=ht && ht<1){r1=c;g1=x;b1=0;}else if(1<=ht && ht<2){r1=x;g1=c;b1=0;}else if(2<=ht && ht<3){r1=0;g1=c;b1=x;}else if(3<=ht && ht<4){r1=0;g1=x;b1=c;}else if(4<=ht && ht<5){r1=x;g1=0;b1=c;}else if(5<=ht && ht<6){r1=c;g1=0;b1=x;}else {r1=0;g1=0;b1=0;}m=l-c/2; // cout<<"m: "<<m<<endl;/* r=(r1+m)*255;g=(g1+m)*255;b=(b1+m)*255;*/r=(r1+m);g=(g1+m);b=(b1+m); } void rgb2hsl(){r=r/255;g=g/255;b=b/255;ma=r>g?(r>b?r:b):(g>b?g:b);mi=r<g?(r<b?r:b):(g<b?g:b);if(ma==mi){h=0;}else if(ma==r && g>=b){h=60*(g-b)/(ma-mi)+0;}else if(ma==r && g<b){h=60*(g-b)/(ma-mi)+360;}else if(ma==g){h=60*(b-r)/(ma-mi)+120;}else if(ma==b){h=60*(r-g)/(ma-mi)+240;}l=(ma+mi)/2;//cout<<l;if(l==0 || ma==mi){sl=0;}else if(0<=l && l<=0.5){sl=(ma-mi)/(ma+mi);}else if(l>0.5){sl=(ma-mi)/(2-(ma+mi));} } void rgb2hsv(){ma=r>g?(r>b?r:b):(g>b?g:b);mi=r<g?(r<b?r:b):(g<b?g:b);//cout<<r<<" "<<g<<" "<<b<<" "<<mi<<" "<<ma<<endl;if(ma==mi){h=0;}else if(ma==r && g>=b){h=60*(g-b)/(ma-mi)+0;}else if(ma==r && g<b){h=60*(g-b)/(ma-mi)+360;}else if(ma==g){h=60*(b-r)/(ma-mi)+120;}else if(ma==b){h=60*(r-g)/(ma-mi)+240;}if(ma==0){sv=0;}else {sv=(ma-mi)/ma;}v=ma; } int ff(double x) {int tmp;tmp=floor(x);tmp=(x-tmp-0.5>0.0000001?tmp+1:tmp);return tmp; } int main(){while(scanf("%s", t)!=EOF){scanf("%s", f);;if(strcmp(f, "RGB")==0){scanf("%lf %lf %lf", &r, &g, &b);//printf("rgb %lf %lf%% %lf%%\n", r, g, b);}else if(strcmp(f, "HSV")==0){scanf("%lf %lf%% %lf%%", &h, &sv, &v);//cout<<s<<" s v "<<v<<endl;sv=sv/100;v=v/100;hsv2rgb();//printf("rgb %lf %lf%% %lf%%\n", r, g, b);}else if(strcmp(f, "HSL")==0){scanf("%lf %lf%% %lf%%", &h, &sl, &l);sl=sl/100;l=l/100;hsl2rgb();//printf("rgb %lf %lf%% %lf%%\n", r, g, b);} //********************************************************if(strcmp(t, "RGB")==0){printf("%s %d %d %d\n", t, ff(r*255), ff(g*255), ff(b*255));}else if(strcmp(t, "HSV")==0){rgb2hsv();printf("%s %d %d%% %d%%\n", t, ff(h), ff(sv*100), ff(v*100));}else if(strcmp(t, "HSL")==0){rgb2hsl();printf("%s %d %d%% %d%%\n", t, ff(h), ff(sl*100), ff(l*100));}}return 0; }

轉載于:https://my.oschina.net/dianpaopao/blog/163290

總結

以上是生活随笔為你收集整理的2013 ACM/ICPC Asia Regional Changsha Online - C的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。