Divisió Equilibrada. X69856


Statement
 

pdf   zip   main.py

Sigui v una llista de mida n>2n > 2 que conté enters (tant positius com negatius). Una divisió de v és una posició ii de la llista (on 0i<len(v)0 \leq i < len(v)), tal que que divideix la llista v en dues parts: de les posicions que van del 00 a i1i-1, i l’altra que va de ii fins a l’última posició: len(v)1len(v) - 1.

La divisió equilibrada de v és una posició i (0i<len(v)0 \leq i < len(v)) que minimitza aquesta diferència (on absabs és el valor absolut):

abs(j=0i1v[j]j=ilen(v)1v[j])abs (\sum^{i-1}_{j=0} v[j] - \sum^{len(v)-1}_{j=i} v[j])

Dit altrament, la divisió equilibrada és una posició ii de la llista tal que diferència entre la suma dels elements que hi ha des de la posició 00 fins a la posició i1i-1 i la suma dels elements entre les posicions ii i len(v)1len(v)-1 és mínima. Fixeu-vos també que aquesta posició ii pot ser 00. Això voldrà dir que la part esquerra de la llista serà buida (i per tant, la seva suma valdrà 00) i la part dreta anirà de la posició 00 fins a la len(v)1len(v)-1, és a dir, serà tot el vector.

Fes la funció divisio_equilibrada(v) tal que, donat una llista v, en torni la divisió equilibrada. Si n’hi haguessin més d’una, torneu la de més a l’esquerra. Com ja hem explicat, el valor 00 per a una divisió equilibrada és possible, ja que vol dir que una la divisió de l’esquerra és buida. Recordeu, que per definició, la suma d’una llista (o un tros de llista) buit és zero.

Per exemple, si la funció rep la llista v=[4,1,2,3]v = [4 , 1 , 2 , 3], torna 22, ja que (4+1)(2+3)=0(4 + 1) - (2 + 3) = 0, mentre que si rep la llista v=[2,1,3,4]v = [2 , 1 , -3 , 4], torna un 11, que és la partició equilibrada, ja que (2)(13+4)=0(2) - (1 - 3 + 4) = 0 és la diferència mínima entre la divisió esquerra i la dreta.

Tingueu en compte que, si calculeu la suma total de la llista al principi de la funció, podreu resoldre aquest problema amb una sola passada sobre la llista v.

Entrada

Una llista v d’enters, amb, almenys, dos elements.

Sortida

La divisió equilibrada de la llista v. Si n’hi haguessin més d’una, torneu la de més a l’esquerra.

Public test cases
  • Input

    4 1 2 3
    

    Output

    2
    
  • Input

    2 1 -3 4
    

    Output

    1
    
  • Information
    Author
    INFO.
    Language
    Catalan
    Official solutions
    Python
    User solutions
    Python