Donats un vector de nombres naturals i una constant , una -segmentació del vector es construeix de la manera següent: Es comença des del primer element i es van sumant elements mentre la suma sigui menor o igual que . A continuació es comencen a restar elements mentre la suma sigui més gran o igual que . A continuació es comencen a sumar elements mentre la suma menor o igual que i així succesivament. El vector es -segmentable si amb aquest procés s’arriba al final del vector.
Per exemple, el vector és -segmentable perquè es pot travessar tot el vector seguint el procediment descrit anteriorment com es veu a continuació (on és la suma):
A: 4 4 1 2 6 7 1 1 8 2 6 7
S: 4 8 9 7 1 8 9 8 0 2 8 1
+ + + - - + + - - + + -
En canvi, el vector no és -segmentable perquè si agafem , ens quedem aturats a mig camí, ja que el 6 no el podem ni sumar ni restar sense superar o ser negatiu:
A: 4 4 1 2 6 7 1 1 8 2 6 7
S: 4 8 7 5
+ + - -
Escriviu un programa que trobi la més petita tal que sigui -segmentable. És fàcil demostrar que sempre existeix un valor de tal que .
L’entrada consiteix en un natural
,
seguit de
naturals A[0], …, A[n-1].
La sortida és el mínim valor de
tal que A és
-segmentable.
Es recomana fer servir una funció:
bool es_segmentable(const vector<int>& A, int k)
que determina si el vector és
-segmentable.
Per a dissenyar una solució eficient, convé pensar en tots aquells valors de que no cal provar.
Autoria: INFO-FME
Generació: 2026-01-25T17:27:13.960Z
© Jutge.org, 2006–2026.
https://jutge.org