2016-12-08 4 views
-3

проблема составляет от https://www.hackerrank.com/challenges/coolguy-and-two-subsequencesЧто такое функция f (a, b) означает значение ниже qustion?

Он сказал ниже.

//f(a, b) is a function that returns the minimum element in interval [a, b] 

ans = 0 

for a -> [1, n] 
    for b -> [a, n] 
     for c -> [b + 1, n] 
      for d -> [c, n] 
       ans = ans + min(f(a, b), f(c, d)) 

Я не понимаю, какая функция f (a, b) есть. например f (1,1) - какое значение и почему? пожалуйста, объясните простой способ.

+8

Комментарий наверху не поможет? –

+0

@ some programmer dude, Nope, Это мне не помогает –

+0

Не тот сайт снова ... Нам нужен какой-то официальный черный черный список. – Lundin

ответ

5

Это действительно странное описание.

Я думаю, что он должен вернуть наименьший элемент массива (A, являющийся массивом) для этого диапазона индексов.

Так в основном:

static int f(const int *a, int low, int high) 
{ 
    int smallest = INT_MAX; 
    for(int i = low; i <= high; ++i) 
    smallest = min(smallest, a[i - 1]); 
    return smallest; 
} 

- 1 есть с a предположительно 1-индексироваться.

Для ввода образца 3 2 1, мы имеем int a[] = { 3, 2, 1 };, и, таким образом f(1, 1) вычисляет минимум только первый элемент, который является 3.

+0

relind @, я понимаю f (a, b) сейчас, но что такое c и d? –

+2

@alexparkjw: 'c' и' d' - это только значения индекса, варьирующиеся от 'b + 1' до' n' и 'c' до' n' соответственно. – chqrlie

+0

Я не понимаю, но я дам вам зеленый V. Спасибо, ребята –

1

В заявлении указывается: f(a, b) - это функция, которая возвращает минимальное значение элемента в позициях a and b вектора.

Например, f(1,6) обращается к объекту 1st and 6th и возвращает минимальное значение. Обратите внимание, что в приведенном выше псевдокоде вы можете это сделать: f(10,2): который ищет позиции 10 and 2 в векторе.

Так что этот код делает:

//f(a, b) is a function that returns the minimum element in interval [a, b] 

    ans = 0 //creates an empty object to fill later in the loop 

    for a -> [1, n] //iterates for the values of a (1 to N) 
     for b -> [a, n] //then iterates for the values of b (a to N) 
      for c -> [b + 1, n] //iterates for the values of c (b+1 to N) 
       for d -> [c, n] //iterate values of d (c to N) 
        ans = ans + min(f(a, b), f(c, d)) //store the answer by keep adding the results in each iteration. for each position combination. 
+2

Нет, в комментарии не сказано. В комментарии говорится _interval_, а не позиции. –

+1

комментарий может не утверждать, что, но когда я смотрю примеры на представленном веб-сайте, это то, что я вижу и понимаю. –

+0

@HerculesApergis Не кажется ли вам смешным, что '[1, n]' от первого 'for' означает« от 1 до N », но для' f' значение значений в скобках совершенно иное? – unwind

Смежные вопросы