洛谷 P7106 双生独白
洛谷 P7106 双生独白
题目背景
我喜欢安静,你热爱喧闹;我忠于温暖,你酷爱凉爽。
如果任何事物都有反面,那拼接这个世界的颜色呢?
只有白与黑吗?
题目描述
为了形式化地描述颜色,我们引入 RGB 颜色值,用三元组 (r,g,b)(r,g,b) 表示一种颜色,其中 r,g,br,g,b 分别为该颜色的 R 值、G 值、B 值,满足 0 \le r,g,b \le 2550≤r,g,b≤255 且皆为十进制整数。
显然,这套颜色系统一共可以表示 256 \times 256 \times 256 = 16,777,216256×256×256=16777216 种不同的颜色。对于颜色 (r,g,b)(r,g,b),定义其反色的 RGB 颜色值为 (255-r,255-g,255-b)(255−r,255−g,255−b)。
然而人们发现,单纯地使用 RGB 颜色值很不方便,复制颜色时要复制三个值。
于是诞生了十六进制颜色码,即形如 #EBA932
长度为 77 的字符串。具体而言:
- 字符串的第一位是
#
,为颜色码标识符。 - 字符串的第二、三位是十六进制数码,拼成的十六进制数等于十进制下所示颜色的 R 值。
- 字符串的第四、五位是十六进制数码,拼成的十六进制数等于十进制下所示颜色的 G 值。
- 字符串的第六、七位是十六进制数码,拼成的十六进制数等于十进制下所示颜色的 B 值。
十六进制数码从小到大包含 0
,1
,2
,3
,4
,5
,6
,7
,8
,9
,A
,B
,C
,D
,E
,F
,注意 A
,B
,C
,D
,E
,F
均为大写。
现在你收到了一组十六进制颜色码,请你输出其反色的十六进制颜色码。
提示:颜色的 RGB 值与十六进制码之间可以相互转换(参考样例解释 #2)
输入格式
一行,输入长度为 77 的字符串,表示原色的十六进制颜色码。
输出格式
一行,输出长度为 77 的字符串,表示反色的十六进制颜色码。
题解:
月赛签到题。
其实相当于FF和给出十六进制数做减法,直接上去就开模拟。
我切的时候考场有26个人切,手速还是慢。
转眼就300多人切了。预估红题,不知道具体是什么题。
代码:
#include<cstdio>
using namespace std;
char s[10];
int a[10];
int main()
{
scanf("%s",s);
for(int i=1;i<=6;i++)
{
if(s[i]>='A'&&s[i]<='F')
a[i]=s[i]-'A'+10;
else
a[i]=s[i]-'0';
}
int r,g,b;
for(int i=1;i<=6;i++)
a[i]=15-a[i];
printf("#");
for(int i=1;i<=6;i++)
{
if(a[i]<=9)
printf("%d",a[i]);
else
{
a[i]-=10;
printf("%c",'A'+a[i]);
}
}
return 0;
}