Cerca en un vector unimodal X82938


Statement
 

pdf   zip   main.cc

En aquest problema, diem que un vector de nn nombres enters @v[0..@n1n-1@]@ és unimodal si n1n \ge 1, i existeix un índex jj tal que 0jn10 \leq j \leq n-1 i que satisfà:

  • @v[0]@ <<< \ldots < @v[@j1j-1@]@ << @v[@jj@]@, i

  • @v[@jj@]@ >> @v[@j+1j+1@]@ >> @v[@j+2j+2@]@ >>> \ldots > @v[@n1n-1@]@.

Per exemple, el vector @[0, 2, 5, 7, 6, 5, 4, 3, 1]@ és unimodal (amb j=3j = 3).

Noteu que els vectors amb n2n \leq 2 elements diferents són unimodals. En general, noteu que tot vector estrictament creixent també és unimodal (i en tots els casos j=n1j = n-1), i anàlogament, tot vector estrictamentment decreixent també és unimodal (i llavors j=0j = 0).

Implementeu una funció eficient

    bool search(int x, const vector<int>& v);

que, donats un enter @x@ i un vector unimodal @v@, retorni cert si @x@ apareix a @v@, i fals en cas contrari. Podeu usar i implementar funcions auxiliars si us calen.

Precondició

El vector @v@ és unimodal.

Observació

Només cal enviar el procediment demanat; el programa principal serà ignorat.

Information
Author
Prof. EDA
Language
Catalan
Other languages
English
Official solutions
C++
User solutions
C++