e-olymp
favorite We need a little bit of your help to keep things running, click on this banner to learn more
Problems

Знайдiть максимум (функції)

Знайдiть максимум (функції)

Дано поле, яке розбите на n * m квадратiв. Рядки нумеруються вiд 1 до n зверху вниз, а стовпцi вiд 1 до m злiва направо. Ваш робот знаходиться в клiтинцi (**1; 1**).

На кожнiй клiтинцi записане певне число. Ваш робот бачить лише те число, яке знаходиться в тiй клiтинцi, на якiй вiн знаходиться. Також вiн може рухатись влiво, вправо, вниз та вгору. На жаль, вiн не знає розмiри прямокутника.

Знайдiть максимум серед всiх чисел на полi, використовуючи робота.

Протокол взаємодiї

Вам потрiбно реалiзувати одну функцiю:

integer solve()

  • ця функцiї має повертати одне цiле число — максимальне число на полi.

Ви можете використовувати наступнi функцiї:

integer getValue() - ця функцiї повертає одне цiле число — число в клiтинцi, на якiй знаходиться робот.

boolean canMoveLeft() boolean canMoveRight() boolean canMoveUp() boolean canMoveDown()

  • кожна з цих функцiй повертає true, якщо робот може пересунутись на клiтинку в певному напрямку (тобто вiн не вийде за межi поля, якщо рухатиметься в тому напрямку), або false в iншому випадку.

void moveLeft()

void moveRight()

void moveUo()

void moveDown()

  • кожна з цих функцiй пересуває робота на одну позицiю в певному напрямку.

Формат вхiдних даних

Перший рядок мiстить два цiлих числа n та m (**1 ⩽ n;m ⩽ 100**)—розмiри поля.

Кожний з наступних n рядкiв мiстить по m цiлих чисел ai1; ai2; : : : ; aim (1 ⩽ aij109)—числа на полi.

Формат вихiдних даних

Буде виведено одне цiле число—максимум серед всiх чисел.

Приклад

Нехай n = 2, m = 3 та

a = 1 3 4 8 1 5

Якщо робот знаходиться в клiтинцi (1; 1), то функцiї canMoveLeft та canMoveUp повернуть false, а canMoveRight та canMoveDown повернуть true. А якщо в тiй позицiї викликати функцiю getValue, то вона поверне 1.

Якщо ви викликаєте функцiю moveDown, то ваш робот буде в позицiї (2; 1). Тодi функцiя canMoveDown поверне false, а getValue — 8.

Звернiть увагу, що приклад не рiшає задачу, а лише показує, як потрiбно використовувати функцiї.

Блоки: 1. (до 50 балiв) n ⩽ 1;

  • припустимо, що c — мiнiмальна кiлькiсть рухiв, якi потрiбно зробити, щоб точно знайти вiдповiдь, а t—максимальна кiлькiсть рухiв, якi ви зробили в усiх тестах, тодi ви отримаєте max(⌊50 - sqrt( t - c⌋; 0) балiв;

  • (до 50 балiв) без додаткових обмежень;

  • припустимо, що c—мiнiмальна кiлькiсть рухiв, якi потрiбно зробити, щоб точно знайти вiдповiдь, а t—максимальна кiлькiсть рухiв, якi ви зробили в усiх тестах, тодi ви отримаєте max(⌊50 - pow(1/3.0,(t-c)⌋; 0) балiв.

Time limit 1 second
Memory limit 64 MiB
Input example #1
2 3
1 3 4
8 1 5
Output example #1
8