8 / 6 / 6
Регистрация: 15.07.2015
Сообщений: 38
|
|
1 | |
Алтарь цветного Бога08.01.2016, 20:57. Показов 1662. Ответов 25
Метки нет (Все метки)
Вот уже год назад Вася записался в секту. И сегодня они решили построить алтари своему цветному (RGB) Господу.
Алтарь строится из кирпичей 3 цветов (R, G, B). Он строится на фундаменте (фундамент не считается алтарем). Правила постройки: 1. Если цвета двух соседних треугольников (кирпичи имеют треугольную форму) внизу какого-то треугольника разные, то этот треугольник должен быть третьего цвета; 2. Если цвет двух соседних треугольников внизу совпадает, то этот же цвет должен иметь и текущий треугольник. 3. Алтарь - правильный треугольник со стороной n=3k (k<=10) (фундамент соответственно n+1). 4. Верхушка алтаря должна быть зеленого цвета. Пример алтаря со стороной n=3: g } r b } Алтарь b g r } r g g b <--- (фундамент) Тех. Условия: Считываем целое число F [1;10]. Из этой же строки считываем (через пробел) F фундаментов (последовательностей символов из множества {r,g,b}). Надо вывести F кусочков фундамента, которых не хватает для того, чтоб вершина была зеленой (п.4). Если нельзя получить зеленую вершину ни одним способом вывести -1. Пример работы: Ввод: 2 rgg ggrggrggr Вывод: b g ----------------------------------------------- Соображения: Я пытался замутить БД со всеми возможными вариантами фундаментов, которые выдадут нам зеленую вершину. В итоге я узнал, что кол-во правильных фундаментов для алтаря = 3n где n - длинна алтаря (НЕ ФУНДАМЕНТА). То есть для n=310 кол-во правильных фундаментов = 359049.
0
|
08.01.2016, 20:57 | |
Ответы с готовыми решениями:
25
Верите ли Вы в Бога? А вы верите в существование Бога? почему ты веришь в бога? Почему не стоит верить в бога? |
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
|
|
08.01.2016, 21:16 | 2 |
то есть к пирамиде мы добавляем еще блоки или заменяем блоки из фундамента?
0
|
8 / 6 / 6
Регистрация: 15.07.2015
Сообщений: 38
|
|
08.01.2016, 21:38 [ТС] | 3 |
Нет. Нам дана часть фундамента. Нам нужно к ней прибавить столько элементов, чтоб ее длинна была n+1 и вершина вышла зеленой.
В примере постройки это правый синий кирпичик в фундаменте.
0
|
09.01.2016, 08:15 | 4 |
В приведенных примерах к фундаменту добавлено по одному камню. Это всегда так или в фундамент можно добавлять сколько угодно камней? Почему-то гугл не находит эту задачу в других местах. Откуда она взялась?
0
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|
09.01.2016, 10:01 | 5 |
Сумма цветов при переходе от нижнего ряда к верхнему не меняется.
Так что цвет вершины -- цвет суммы "фундамента". Если цвет фундамента равен искомому -- задача решена. Если нет, то нужно вычесть из искомого цвета цвет суммы фундамента и добавить его к фундаменту. Задача всегда разрешима добавлением не более, чем одного камня. Добавлено через 3 минуты Очень похожая задачка была в разделе C ЕГЭ по информатике... Может пару лет назад, может год, сейчас уже и не помню...
0
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|
09.01.2016, 15:57 | 7 |
Для цветов можно определить простой моноид с операцией сложения согласно следующим правилам:
И т.д. Операция будет коммутативна и ассоциативна. Используя эту операцию можно подсчитать сумму всех цветов в строке. Это тоже будет какой-то цвет. Учитывая, что , где -- k-ый элемент в n-ой строке, легко показать, что суммарный цвет в каждой строке не меняется. Следовательно цвет вершины алтаря равен суммарному цвету фундамента.
0
|
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
09.01.2016, 15:58 | 8 |
0
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|
09.01.2016, 16:10 | 9 |
avgoor
Да. Не ассоциативна операция. Сейчас модернизируем.
0
|
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
09.01.2016, 16:20 | 10 |
Просто, для случая, когда операндов больше двух возвращается не цвет, а кортеж цветов, а он имеет свойство порядка.
Добавлено через 8 минут По теме задачи. Достраиваем пирамиду до высоты n-1 произвольным способом. Потом идем от вершины вниз. Вершина зеленая. тогда если левый кирпич высоты n-1 зеленый, тогда правый - тоже зеленый. Если левый синий, то правый красный. если красный - синий. Так спускаемся до основания.
2
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|
09.01.2016, 17:27 | 11 |
Дельного ничего не получается придумать. Не переставляются скобки очевидным образом. То есть, я сейчас не вижу, но возможно он, всё же, есть.
Можно по правилу сложения вычислить следующий ряд, за ним следующий и т.д. до вершины. Далее по тем же правилам сложения можно достроить пирамиду вниз. Например, если есть пирамида G GG BRB но мы хотим B на вершине, то нужно достроить правый скат: B Gx GG? BRB? x = B - G = R B GR GGx BRB? x = R - G = B B GR GGB BRBx x = B - B = B B GR GGB BRBB Решение по-прежнему существует всегда при добавлении не более одного кирпича в фундамент. Добавлено через 17 минут P.S. Есть подозрение, что нужно сложить два крайних элемента и вычесть средние элементы. Т.е. для фундамента BGRBBR вершина (((((B+R) - G) - R) - B) - B) = B B GR BRR GRRR RBGBG BGRBBR
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
09.01.2016, 19:33 | 12 | |||||
Сообщение было отмечено gru74ik как решение
Решение
Ну, можно экономнее. Достраиваем заданное начало основания до треугольника. Если вершина зеленая, то достраиваем эту строку зелеными символами до нужной длины и вычисляем цвета вниз. Если же не зеленая, то строку на уровень выше заполняем всю зелеными символами и заполняем цвета вниз:
1
|
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
10.01.2016, 01:09 | 13 |
Экономнее нельзя. Чтобы вершина стала зеленая нам нужно достроить одну сторону определенным образом (добавить один кирпич определенного цвета в основание). Но в задаче нужно добавить больше одного кирпича (достроить до n-1 произвольным способом, все зеленые тоже произвольный способ).
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
10.01.2016, 01:50 | 14 |
Ну как же нельзя, когда именно можно! Если подниматься до вершины, то придется вычислять цвета во всем алтаре. В моем способе вычисляем цвета не выше уровня p+1, где p - длина заданной части фундамента.
0
|
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
10.01.2016, 01:54 | 15 |
Еще раз: заполнить все недостающие кирпичи фундамента, кроме одного зеленым цветом - тоже произвольный способ.
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
10.01.2016, 01:57 | 16 |
А это вы откуда взяли?
Ну, не знаю чего вы спорите. Вычислять часть цветов алтаря экономнее, чем все. Против логики не попрешь!
0
|
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
10.01.2016, 02:07 | 17 |
0
|
8 / 6 / 6
Регистрация: 15.07.2015
Сообщений: 38
|
|
10.01.2016, 16:01 [ТС] | 18 |
[Error] no match for call to '(inc_right_altar_side_and_save_result_back(T_str&, T_str&)::__lambda0) (char&)'
112 строка [Error] 'side_color' was not declared in this scope 108 строка [Error] parameter declared 'auto' Задача не работает, но за идею спасибо
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
10.01.2016, 19:28 | 19 |
За идею пожалуйста, но если вы возьмете компилятор с поддержкой C++11, то и задача заработает.
1
|
0 / 0 / 0
Регистрация: 19.01.2016
Сообщений: 7
|
|
21.01.2016, 14:45 | 20 |
mporro,
Можете подробнее объяснить что это значит? (((((B+R) - G) - R) - B) - B) = B
0
|
21.01.2016, 14:45 | |
21.01.2016, 14:45 | |
Помогаю со студенческими работами здесь
20
В проект симулятора бога требуются энтузиасты Непонятно изложенная тема про режим бога Некоторые доказательства существования бога. С последующими придирками и разоблачениями Работа с файлами. Ради Бога, решите пожалуйста. Задание ниже Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |