Vectors Segmentables X95177


Statement
 

pdf   zip

Donats un vector AA de nombres naturals i una constant k>0k > 0, una kk-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 kk. A continuació es comencen a restar elements mentre la suma sigui més gran o igual que 00. A continuació es comencen a sumar elements mentre la suma menor o igual que kk i així succesivament. El vector es kk-segmentable si amb aquest procés s’arriba al final del vector.

Per exemple, el vector A={4,4,1,2,6,7,1,1,8,2,6,7}A = \{4, 4, 1, 2, 6, 7, 1, 1, 8, 2, 6, 7\} és 99-segmentable perquè es pot travessar tot el vector seguint el procediment descrit anteriorment com es veu a continuació (on SS é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 88-segmentable perquè si agafem k=8k = 8, ens quedem aturats a mig camí, ja que el 6 no el podem ni sumar ni restar sense superar kk 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 kk més petita tal que AA sigui kk-segmentable. És fàcil demostrar que sempre existeix un valor de kk tal que k2max{A[i]},0i<A.size()k \le 2\cdot\max\{A[i]\}, 0\le i < A.size().

Entrada

L’entrada consiteix en un natural nn, seguit de nn naturals A[0], …, A[n-1].

Sortida

La sortida és el mínim valor de kk tal que A és kk-segmentable.

Observació

Es recomana fer servir una funció:

bool es_segmentable(const vector<int>& A, int k)

 
que determina si el vector és kk-segmentable.

Per a dissenyar una solució eficient, convé pensar en tots aquells valors de kk que no cal provar.

Public test cases
  • Input

    10
    3 1 2 1 4 2 2 1 3 1

    Output

    5
    
  • Input

    20
    1 2 1 2 1 2 6 1 2 1 2 1 2 1 7 2 1 2 1 2

    Output

    9
    
  • Input

    20
    1 2 1 2 1 2 6 1 2 1 2 1 2 7 1 2 1 2 1 2

    Output

    13
    
  • Information
    Author
    INFO-FME
    Language
    Catalan
    Other languages
    Spanish
    Official solutions
    C++
    User solutions
    C++