Задача взята с сайта e-olymp
Задача
Крупнейшему индийскому математику XII в. Бхаскаре принадлежит трактат «Сиддханта-широмани» («Венец учения»), переписанный в XIII в. на полосках пальмовых листьев. Этот трактат состоит из четырех частей, из которых «Лилавати» посвящена арифметике, «Биджаганита» — алгебре, остальные две части астрономические. «Лилавати» (что значит «прекрасная») Бхаскара посвятил своей дочери.
Многие свои задачки Бхаскара излагал в поэтической форме, вот одна из них:
Из множества чистейших цветков лотоса
Третья часть была принесена в дар Шиве,
Пятая часть – Вишну, шестая часть – Солнцу;
Четвёртую часть всех цветков получил Бхвани,
А оставшиеся шесть цветков были даны высокочтимому Учителю.
Мы не можем дословно передать всю прелесть и красоту звучания этих стихов Древней Индии, поэтому нашу задачку сформулируем в прозе. Итак, эта же задачка в общем виде: «В дар Шиве принесли A-ую часть цветков лотоса, в дар Вишну – B-ую часть, в дар Солнцу – C-ую часть, для Бхвани досталась D-ая часть и высокочтимый Учитель получил E цветков. Сколько всего цветков лотоса было в распоряжении дарившего?»
Входные данные
В первой и единственной строке входных данных заданы через пробел 5 неотрицательных целых чисел: A, B, C, D и E, каждое из которых не превышает 100.
Выходные данные
Вывести единственное число – ответ на задачу, или –1 в случае, если входные данные противоречивы, либо же решить задачку однозначно не предоставляется возможным.
Тесты
# | Входные данные | Выходные данные |
---|---|---|
1 | 3 5 6 4 6 | 120 |
2 | 8 8 0 4 20 | 40 |
3 | 2 10 20 0 1 | -1 |
4 | 2 3 20 60 1 | -1 |
5 | 2 4 8 16 1 | 16 |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include < iostream > #include < string > using namespace std; int main() { int a, b, c, d, e; cin >> a >> b >> c >> d >> e; int res; if (a == 0 && b == 0 && c == 0 && d == 0 && e == 0) { res = 0; } else { int abcd = (a == 0 ? 1 : a) * (b == 0 ? 1 : b) * (c == 0 ? 1 : c) * (d == 0 ? 1 : d); int sum = (a == 0 ? 0 : 1) * (b == 0 ? 1 : b) * (c == 0 ? 1 : c) * (d == 0 ? 1 : d) + (a == 0 ? 1 : a) * (b == 0 ? 0 : 1) * (c == 0 ? 1 : c) * (d == 0 ? 1 : d) + (a == 0 ? 1 : a) * (b == 0 ? 1 : b) * (c == 0 ? 0 : 1) * (d == 0 ? 1 : d) + (a == 0 ? 1 : a) * (b == 0 ? 1 : b) * (c == 0 ? 1 : c) * (d == 0 ? 0 : 1); int all; res = (e != 0 && (e * abcd) % (abcd - sum) == 0 && (all = (e * abcd) / (abcd - sum)) % (a == 0 ? 1 : a) == 0 && all % (b == 0 ? 1 : b) == 0 && all % (c == 0 ? 1 : c) == 0 && all % (d == 0 ? 1 : d) == 0) ? all : -1; } cout << res; } |
Решение
Целое это 1, поэтому [latex]1-(\frac{1}{a}+\frac{1}{b}+\frac{1}{c}+\frac{1}{d})=\frac{1}{e}[/latex]
В свою очередь общее количество цветков будет [latex]e\cdot(\frac{a\cdot b\cdot c\cdot d}{a\cdot b\cdot c\cdot d-(b\cdot c\cdot d+a\cdot c\cdot d+a\cdot b\cdot d+a\cdot b\cdot c)})[/latex]
Остается учесть что входные данные могут иметь нули. И в конце проверить чтоб количество цветов принесённых в дар было целым числом для каждого из Богов.
Вижу на Вас повлиял совершенно не читаемый код, который я написал из упрямства, пытаясь следовать собственным рекомендациям по минимальному числу ветвлений:
В результате Ваш код тоже стал плохо читаемым 🙁
Был бы рад если бы у Вас получилось сделать понятный, хорошо читаемый код.
Но если нет, то нестрашно.
Спасибо, исправил