2016-12-08 18 views
-3

Das Problem ist von https://www.hackerrank.com/challenges/coolguy-and-two-subsequencesWas ist die Funktion f (a, b) bedeutet unten?

Es sagte unten.

//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)) 

Ich verstehe nicht, welche Funktion f (a, b) ist. zum Beispiel f (1,1) ist was Wert und warum? bitte erklären Sie einfach.

+8

Der Kommentar am Anfang Ihnen nicht hilft? –

+0

@some Programmierer Kerl, Nein, es hilft mir nicht –

+0

Nicht diese Seite wieder ... Wir brauchen eine Art von offiziellen SO Blacklist. – Lundin

Antwort

5

Das ist eine wirklich seltsame Beschreibung.

Ich denke, es sollte das kleinste Array-Element (A ist das Array) für diesen Bereich von Indizes zurückgeben.

Also im Grunde:

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; 
} 

Die - 1 ist seit a ist angeblich 1-indiziert.

Für die Probeneingabe 3 2 1 haben wir int a[] = { 3, 2, 1 }; und somit f(1, 1) berechnet die Minimum von nur dem ersten Element, welches 3 ist.

+0

abwickeln @, ich verstehe f (a, b) jetzt, aber was sind c und d? –

+2

@alexparkjw: 'c' und' d' sind nur Indexwerte, die von 'b + 1' nach' n' bzw. 'c' nach' n' variieren. – chqrlie

+0

Ich verstehe nicht, aber ich werde dir grünes V geben. Danke Jungs –

1

Der Kommentar besagt dies: f(a, b) ist eine Funktion, die den minimalen Wert des Elements in den Positionen a and b des Vektors zurückgibt.

Zum Beispiel sieht f(1,6) in den Vektor für die 1st and 6th Elemente und gibt ihren Mindestwert zurück. Hinweis für in der oben genannten Pseudo-Code können Sie dies haben: f(10,2): die im Vektor die Positionen von 10 and 2 sucht.

Also dieser Code was tut, ist:

//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

Nein, der Kommentar besagt das nicht. Der Kommentar sagt das _interval_, nicht die Positionen. –

+1

der Kommentar könnte das nicht sagen, aber wenn ich mir die Beispiele in der Website anschaue das ist das, was ich sehe und verstehe. –

+0

@HerculesApergis Glaubst du nicht, dass es lustig ist, dass '[1, n]' vom ersten 'für'" 1 bis N "bedeutet, aber für' f' ist die Bedeutung der Werte in Klammern völlig anders? – unwind

Verwandte Themen