Задача. Дана действительная квадратная матрица порядка [latex]n[/latex]. Получить [latex]x_{1}x_{n} + x_{2}x_{n-1}+ \cdots + x_{n}x_{1} [/latex], где[latex] x_k[/latex] — наибольшее значение элементов [latex]k[/latex]-й строки данной матрицы.
Суть задачи. Происходит заполнение многомерного массива. После этого в силу коммутативности умножения первая сумма полностью совпадает с последней, вторая — с предпоследней и т.д. Т.е. все слагаемые берутся дважды, кроме середины для нечётного [latex]n[/latex]. Это означает, что каждый максимум при вычислении суммы потребуется ровно один раз и никакой массив максимумов не нужен.
Оригинал решения
Решение на Try Haxe!
Тесты
[latex]n[/latex] | Элементы | Результат |
---|---|---|
2 | 1 2 3 4 | 16 |
3 | 1 2 3 4 5 6 7 8 9 |
1146 |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
static function main() { var n = Std.parseInt(Sys.stdin().readLine()); var array = new Array<Array<Float>>(); var sum:Float = 0; for (i in 0...n) { array[i] = new Array<Float>(); for (j in 0...n) { array[i][j] = Std.parseFloat(Sys.stdin().readLine()); } } for (i in 0...Std.int(((n + 1) / 2))) { sum += 2 * max(array[i]) * max(array[Std.int(n - i - 1)]); } trace(sum); } static function max(x:Array<Float>) : Float { var max:Float = x[0]; x[0] = 91; for (i in 1...x.length) { max = (max > x[i]) ? max : x[i]; } return max; } |
Алексей Маслеев недавно публиковал (посмотреть все)
- e-olimp 4650. Граф-Турнир - 26.06.2017
- А400 - 13.05.2017
- e-olymp 905. Какой треугольник? - 13.05.2017
Ссылка на try.haxe с одним тестовым примером хотя бы.
Ссылка на соответствующую задачу на cpp.mazurok.com.
Тесты и результаты этих тестов.
Переменная str никак не фигурирует , она постоянно равно 0. Думаю лучше её убрать.
Табуляция в коде. Примеры есть тут. Я за стиль Олмана, но вы выбирайте как вам удобнее.
Я понимаю, что описание решения было взято с cpp.mazurok.com. Судя по комментариям оно подходило к первоначальном решению. Позже решение изменилось а описание нет. Думаю надо переформулировать его с тем решением, которое сейчас.
Поправил
Что-то мне не кажется, что Вы поправили отступы или сделали тесты.
Теги к задаче.
Поправил
А400 это теги к задаче? Это те ключевые слова, которые наилучшим образом описывают суть проблемы?
Алексей, у Вас уже куча минусов в карме. Я начинаю опасаться за Вашу следующую реинкарнацию.
— Отступы!
— Тесты где?
— Метки (ключевые слова) стоит переделать.
— Алгоритм решения нуждается в переделке. В силу коммутативности умножения первая сумма полностью совпадает с последней, вторая — с предпоследней и т.д. Т.е. все слагаемые берутся дважды, кроме середины для нечётного n. Это означает, что каждый максимум при вычислении суммы потребуется ровно один раз и никакой массив максимумов не нужен.
Исправил