СПбГУ НИУ ИТМО. Интернет-олимпиада школьников по информатике (2009-2010 уч. год).
Приведены задачи и решения 1 тура отборочного этапа для школьников 9-10 классов:
Информация и её кодирование.
Системы счисления: перевод и выполнение арифметических операций.
Простая задача (2 балла): Вычислите произведение двух чисел: x и y, если x=10111,01112, y=408. В ответе укажите результат в десятичной системе счисления.
Решение:
Т.к. ответ все равно нужно записать в десятичной системе счисления, то логично перемножать числа в ней же.
(о правилах перевода систем счисления читайте здесь)
Сначала переведем число x=10111,01112 в десятичную систему счисления:
x=1*16+0*8+1*4+1*2+1*1+0*0,5+1*0,25+1*0,125+1*0,0625=23+0,4375=23,437510
Аналогично поступим с числом y=408:
y=4*8+0*1=3210
Перемножим результаты:
x*y=23,437510*3210=75010
Ответ: 750.
Сложная задача (3 балла): Сколько существует целых положительных чисел меньших 51210 в двоичной записи которых встречается не менее шести единиц подряд. В ответе укажите целое число.
Решение:
Решение еще не готово...
Переведем число 51210 в двоичную систему счисления:
51210=1000'000'0002 (о том, как быстро переводить числа, являющиеся "степенями двойки"
в двоичную систему счисления читайте здесь)
Ответ: 20.
Определение основания системы счисления через решение уравнения.
Простая задача (1 балл): Укажите через запятую в порядке возрастания все целые положительные десятичные числа, не превосходящие 26, запись которых в троичной системе счисления оканчивается на 22.
Решение:
Очевидно, первым делом мы переводим число 26 в троичную систему счисления (о правилах перевода систем
счисления читайте здесь):
2610=2223
Теперь запишем все целые положительные троичные числа, не превосходящие 222, в порядке возрастания:
000; 001; 002; 010; 011; 012; 020; 021; 022; 100; 101; 102; 110; 111; 112; 120; 121; 122; 200; 201; 202; 210; 211; 212; 220; 221; 222.
Из них на 22 заканчваются всего 3: 022; 122; 222.
Можно и не выписывать все эти числа. Очевидно, что в искомых числах последние две цифры - двойки. Т.е. они имеют вид *22. Сколькими способами можно выбрать первую цифру? Конечно, тремя (0/1/2), т.к. в троичной системе счисления нет других цифр, кроме нуля, единицы и двойки.
Все, что осталось сделать - перевести эти числа в десятичную систему счисления (о правилах перевода систем счисления читайте здесь):
- 0223=0*9+2*3+2*1=810;
- 1223=1*9+8=1710;
- 2223=2*9+8=2610.
Ответ: 8; 17; 26.
Сложная задача (3 балла): Чему равно наименьшее основание позиционной системы счисления Y, при котором 225X=14Y? Ответ записать в виде целого числа.
Решение:
Сначала найдем минимальное основание системы Y, в которой возможно представить число 14. Это основание равно 5 - в четверичной системе нет цифры 4, а пятиричная - минимальная (следующая за 4) система, в которой она есть.
Соответственно, для X это основание равно 6. Переведем число 2256 в десятичную систему счисления: 2256=8910
Дальше будем постепенно увеличивать Y и переводить число 14Y в десятичную систему счисления, пока числа не станут равны (14Y->A10=8910):
2256=8910 |
145=1*5+4*1=5+4=910 146=6+4=1010 147=7+4=1110 148=8+4=1210 ... |
Скорее всего читатель уже догадался, что Y=9 тоже маловато будет и до 89 еще далеко. Несложно заметить, что
в данной задаче - внимание: в данной задаче - для перевода в десятичную систему счисления мы всегда прибавляем к нужному
основанию 4. Это "нужное основание" обозначено Y. Получим уравнение:
14Y=Y+4=8910
Y+4=89
Y=89-4=85
Ответ: 85 (2256=1485).
Объем информации.
Простая задача (2 балла): Укажите минимальное число символов в алфавите, чтобы с помощью слов из пяти букв можно было бы передавать 220 различных сообщений. Слова могут содержать повторяющиеся символы. Ответ дать в виде целого числа (для решения данной задачи можно почитать этот раздел).
Решение:
Воспользуемся видоизмененной (под 5 событий) формулой N=5i; отсюда i=log5N (в какую степень нужно возвести 5, чтобы получить N).
N=220; i=log5220.
Очевидно, что у пятерки нет степени, возведя в которую, получим 220, значит нужно выбрать
минимальную степень, когда мы получим число, большее 220:
51=5 - маловато
52=25 - маловато
53=125 - маловато
54=625 - подходит!
Ответ: 4.
Сложная задача (3 балла): Книга, состоящая из 272 страниц, занимает объем 2 мегабайта. Часть страниц книги полностью заняты текстом. Каждая такая страница содержит ровно 1024 символа. Другая часть страниц полностью заполнена изображениями с разрешением 768 на 1024 точек. Известно, что страниц с текстом в 16 раз больше чем страниц с изображениями. Сколько цветов в палитре изображений, если известно, что текстовые символы кодируются двухбайтной кодировкой Unicode. Ответ запишите в виде целого числа.
Решение:
Вес книги складывается из веса страниц с текстом и веса страниц с изображениями:
I=Iт+Iи= 2 Мб = 2*210 Кб = 2*210*210 байт =
2*223 бит = 224 бит.
Iт = k страниц с текстом * k символов на странице * i (инф. вес одного символа) =
=
k страниц с текстом * 1024*23 бит = k страниц с текстом * 213 бит.
Iи = k страниц с изображениями * k пикселей * i (глубина цвета) =
= k страниц с изображениями * 1024*768 * i (глубина цвета) бит.
Iи = I-Iт = I - k страниц с текстом * 213;
k страниц с изображениями * 210*768 * i (глубина цвета) =
= 224 - k страниц с текстом * 213;
k страниц с текстом = 16 * k страниц с изображениями;
k страниц с текстом + 16 * k страниц с изображениями = 272;
17 * k страниц с изображениями = 272;
k страниц с изображениями = 16;
k страниц с текстом = 16*16 = 160+60+36 = 220 + 36 = 256;
24 * 210*768 * i (глубина цвета) = 224 - 28 * 213;
214*768 * i (глубина цвета) = 224 - 221;
214*768 * i (глубина цвета) = 221 * (23 - 1);
768 * i (глубина цвета) = 27 * 7;
i (глубина цвета) = 896/768;
i (глубина цвета) ~ 1 (ближайшее целое).
N(количество цветов в палитре) = 2 i (глубина цвета).
N(количество цветов в палитре) = 2.
Ответ: 2.
Основы логики.
Основные понятия и законы математической логики.
Простая задача (1 балл): Какая из логических операций не будет иметь истинного значения, когда на входе операции все аргументы истинны? В ответе укажите номер операции в списке.
- Импликация;
- Дизъюнкция;
- Конъюнкция;
- Исключающее ИЛИ.
Решение:
Для решения просто нужно знать таблицы истинности для всех 4-х операций:
|
|
Ответ: 4.
Сложная задача (2 балла): Четыре года подряд Коля, Сережа, Ваня и Петя ходили в походы в мае, июне, июле и августе. Каждый мальчик по одному разу был в походе в каждый из перечисленных месяцев, при этом не было такого года, чтобы в один и тот же месяц в поход пошли сразу несколько мальчиков. В первый год Ваня ходил в поход в июле, а во второй - в августе. Во второй год в мае в поход ходил Коля. На третий год в июне в поход ходил Петя, а на четвертый год в июле в поход ходил Сережа. В каком месяце ходил в поход Сережа в первый год? В ответе укажите название месяца маленькими буквами в именительном падеже.
Решение:
На самом деле задача довольно простая и решается, большей частью, подбором.
Составим табличку, соответсвующую условию:
год месяц |
I | II | III | IV |
Май | ? | К | 0 | 0 |
Июнь | ? | ? | П | ? |
Июль | В | ? | ? | С |
Август | ? | В | ? | ? |
Т.к. каждый мальчик по одному разу был в походе в каждый из перечисленных месяцев, то удобнее всего заполнять таблицу, начиная с Пети - буква стоит на диагонали, и мы можем заполнить всю эту диагональ:
год месяц |
I | II | III | IV |
Май | ? | К | 0 | П |
Июнь | ? | ? | П | ? |
Июль | В | П | ? | С |
Август | П | В | ? | ? |
Дальше удобно "заполнить Ваню" - буква уже стоит в двух клетках - заполняем оставшиеся две без повторений в строке:
год месяц |
I | II | III | IV |
Май | ? | К | В | П |
Июнь | ? | ? | П | В |
Июль | В | П | ? | С |
Август | П | В | ? | ? |
Очевидно, в правой нижней ячейке должна стоять буква "К" - она займет диагональную ячейку, и мы заполним все "К-ячейки" (т.к. во втором столбце К стоит в первой строке, то в первом столбце поставим ее на вторую строку, чтобы не было повторений строке):
год месяц |
I | II | III | IV |
Май | ? | К | В | П |
Июнь | К | ? | П | В |
Июль | В | П | К | С |
Август | П | В | ? | К |
Оставшиеся ячейки "заполняем Сержей":
год месяц |
I | II | III | IV |
Май | С | К | В | П |
Июнь | К | С | П | В |
Июль | В | П | К | С |
Август | П | В | С | К |
Ответ: май.
Работа с таблицами истинности и упрощение выражений.
Простая задача (1 балл): Для логической функции F(X,Y,Z) известен фрагмент таблицы истинности:

Какие из предложенных выражений соответствуют функции F? В ответе укажите в порядке возрастаний номера соответствующих выражений через запятую.
- not (X and Y) and Z;
- not (X or not Y) or Z;
- not (X and Y) or Z;
- (X or Y) and Z;
- not (X or Z) or not Y.
Решение:
Просто подставим построчно значения из фрагмента таблицы истинности значения в каждую функцию (условно заменим логические операции матемтическими):
- not(X*Y) * Z = not(0*0) * 0 = 1*0 = 0 - можно дальше не проверять - несовпадение по первой строке;
- not(X + notY) + Z = not(0 + not0) + 0 = 0 + 0 = 0 - можно дальше не проверять -
несовпадение по первой строке;
- not(X*Y) + Z = not(0*0) + 0 = 1;
not(X*Y) + Z = not(0*0) + 1 = 1;
not(X*Y) + Z = not(0*1) + 0 = 1 - полное совпадение по всем строкам; - (X+Y) * Z = (0+0) * 0 = 0; - можно дальше не проверять -
несовпадение по первой строке;
- not(X+Z) + notY = not(0+0) + not0 = 1;
not(X+Z) + notY = not(0+0) + not1 = 1;
not(X+Z) + notY = not(0+1) + not0 = 1 - полное совпадение по всем строкам.
Ответ: 3, 5.
Сложная задача (3 балла):
Упростите логическое выражение или укажите его результат (при его
однозначности). Результат упрощения может содержать только операции инверсии,
конъюнкции и дизъюнкции.
not (A and B or (A -> B)) -> B
Комментарий по вводу ответа: операнды вводятся большими латинскими буквами; логические операции обозначаются, соответственно как not, and и or. Между названием логической операции и операндом ставится пробел; между открывающей скобкой и операндом или логической операцией пробел не ставится; между операндом или логической операцией и закрывающей скобкой пробел на ставится; между скобками пробел не ставится; перед открывающей скобкой и после закрывающей скобки ставится пробел. Скобки используются только для изменения порядка выполнения операций. Если порядок выполнения операций очевиден из их приоритетов – дополнительное использование скобок считается ошибкой. При однозначном ответе – истинный ответ обозначается как 1, а ложный как 0.
Решение:
Решение еще не готово...
Ответ: ...
Алгоритмизация и программирование.
Языки.
Простая задача (1 балл): Дан фрагмент программы, обрабатывающей массив, размером в M элементов, заполненный неповторяющимися целыми числами.

Сколько элементов массива после обработки не изменят своего значения, если M=21? В ответе укажите целое число.
Решение:
Эту задачу можно решать блоками в уме, чтобы экономить время.
Однако, покажу подробное полное решение.
Итерация - один "проход" по циклу (развернутые определения и подробный материал по циклам находится здесь).
Возьмем произвольный массив из 21 элемента, подходящий под условие:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
Первая итерация: i=1; следующая строка присваивает элементу с "номером" [i] (т.е. первому, т.к. i сейчас равно 1) значение элемента с "номером" [M-i+1] (т.е. 21-1+1=21). Если Вы решаете "в уме" важно помнить, что присваивая переменной новое значение, мы "заменяем" старое, что хорошо видно при письменном решении. Таким образом 21-й элемент получает уже измененное значение первого элемента.
Соответственно, после первого "прохода" (i=1) имеем:
20 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
Вторая итерация: i=2; элементу с "номером" i присваивается значение элемента с номером [M-i+1] (т.е. 21-2+1=20). Двадцатый элемент при этом получит измененное значение первого.
После второго "прохода" (i=2) имеем:
20 | 19 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
Далее повторяем однообразные шаги, подобные двум предыдущим... и сравиваем значения элементов исходного и конечного массивов, подсчитываем, сколько элементов не изменили свое значение:
Исходный массив VS Измененный массив:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
P.s. Конечно же, читатель захочет увидеть пошаговое выполнение
программы:
Шаг 0 из 21:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
Ответ: 11.
Очевидно, мы не можем выполнять все пошагово, скажем, для 101 элемента (похожая ситуация предсавлена в следующей задаче) - важно увидеть именно алгоритм и понять, что он делает. Сразу внимательно посмотрев на программу и разобрав начальные шаги, понимаем, что исполнитель изменяет значения элементов первой половины массива, не затрагивая вторую половину (а так как у нас нечетное количество элементов, то "центральный" элеент тоже остается неизменным - соответственно для 101 элемента в ответе получаем 51).