Polinomis amb forats X47545


Statement
 

pdf   zip

Representarem un polinomi com la llista que conté els seus coeficients en ordre creixent per grau. Per exemple, si pp és 4x6+2x5+3x+94x^6+2x^5+3x+9 llavors es representa com [9,3,0,0,0,2,4][9, 3, 0, 0, 0, 2, 4]. És a dir, a cada posició ii de la llista, es guarda el coeficient del monomi de grau ii del polinomi. Noteu que l’últim coeficient que es guarda és el de grau máxim (44 a l’exemple). Com a conseqüència, les llistes que representen polinomis no nuls, sempre han de tenir un valor diferent de zero a l’última posició.

Donada una llista qq que representa un polinomi no nul d’enters, es diu que q[i:j]q[i:j] és un forat si q[i:j]==[0]*(ji)q[i:j] == [0]*(j-i) i q[j]0q[j] \not= 0. La longitud d’un forat q[i:j]q[i:j] és jij -i. Per exemple, el polinomi pp d’amunt té un forat de longitud 33 a la posició 22, perquè p[2:5]==[0,0,0]==[0]*(52)p[2:5] == [0, 0, 0] == [0]*(5-2) i p[5]0p[5] \not= 0.

Considereu la següent funció @len_forat(p,i)@ que donat un polinomi no buit pp, retorna la longitud del forat que comença a la posició ii, 0<=i<=len(p)10<=i<=len(p)-1:

def len_forat(p, i):
    '''
    Donada una llista p que representa un polinomi no buit d'enters,
    i una posicio i, 0 <= i <= len(p)-1, retorna la logitud del forat 
    a la posicio i
    >>> len_forat([9, 3, 0, 0, 0, 2, 4], 2)
    3
    >>> len_forat([9, 3, 0, 0, 0, 2, 4], 1)
    0
    '''
    j = i
    while p[j] == 0:
        j += 1
    return j-i

Implementeu una funció @cerca_forat(p,n)@ que retorni les dues posicions (i,j1)(i, j-1), tal que p[i:j]p[i:j] és el primer forat de longitud més gran o igual que nn del polinomi no nul pp. Si pp no té cap forat més llarg o igual que nn llavors ha de retornar (1,1)(-1, -1). És obligatori que la implementació de @cerca_forat(p,n)@ usi @len_forat(p,i)@ i que sigui una cerca.

Exemple de sessió

Sample session
>>> cerca_forat([9, 3, 0, 0, 0, 2, 4], 2)
(2, 4)
>>> cerca_forat([9, 3, 0, 0, 0, 2, 4], 3)
(2, 4)
>>> cerca_forat([9, 3, 0, 0, 0, 2, 4], 4)
(-1, -1)
>>> cerca_forat([0, 0, 9, 3, 0, 0, 0, 2, 4], 3)
(4, 6)
>>> cerca_forat([1, 1, 1], 0)
(0, -1)
Information
Author
InfBesos
Language
Catalan
Official solutions
Python
User solutions
Python