Задачка простая, недавно здесь подобную решал. Чтобы её решить, нужно знать несколько базовых положений.
1. Для отображения цветовой гаммы, как правило, исользуется 3 цвета(красный, зелёный, синий).
2. Если для цвета выделено n бит, он может принимать 2^n оттенков. (это чистая математика(комбинаторика)).
3. Как следствие, макс количество цветов в палитре 2^n*2^n*2^n = 2^(3n)
Теперь можно решать задачу.
Пусть под цвет выделено n бит.
Так как всего цветов 3, на один пиксел будет 3*n бит, Следовательно, общий объем рисунка будет
1024 * 512 *( 3*n) = 512 K *(3*n) = (1.5*n)Mбита (По определению 2^10 = 1024 = 1K) .
Вот, в принципе, и всё!
Но Дальше БОЛЬШИЕ сложности, так как не понятно, что написано в условии, что такое Мб - это мегаБИТ или МегаБАЙТ, поэтому придётся рассматривать 2 случая
1. МегаБИТ.
(1.5*n) = 1.5
n=1, то есть под цвет выделен 1 бит.
Макс количество цветов в палитре
2^(3n) = 2^3 = 8.
Да! всего 8 оттенков.
2. МегаБАЙТ, вспомним, что байт=8бит, получим
(1.5*n) = 1.5 *8,
n=8, то есть под цвет выделен целый байт(8 бит)
Макс количество цветов в палитре
2^(3n)= 2^24= 16777216.
Вот и всё.
Да, в реальности, в настоящее время, как правило, под цвет выделено ОДИН БАЙТ, то есть случай 2 полностью соответствует принятому в настоящее время стандарту де-факто и в пикселе 3 байта.
var s,s1:string;
i,j,count:integer;
begin
read(s);
for i:=length(s) downto 2 do
for j:=2 to i do
if s[j]<s[j-1] then begin
swap(s[j],s[j-1]);
s1:=s;
end;
//сортируем строку в алфавитном порядке чтобы потом было легче
//считать количество встреч одного и того же символа
count:=1;
write(s1[1],': ');
//первый символ в любом случае встречается один раз
for i:=2 to length(s1) do
if s1[i]=s1[i-1] then inc(count) else begin
writeln(count);
write(s1[i],': ');
count:=1
end;
//считаем количество совпадений для каждого символа
writeln(count);
end.