L'última posició X31870


Statement
 

pdf   zip

html

Disposem d’una llista ordenada de n nombres x0, x1,…, xn − 1 i d’un nombre z tal que x0z < xn − 1 . Es demana una funció effi_last_pos amb un codi molt eficient que calculi l’última posició i tal que xiz. La funció ha d’estar convenientment documentada i s’ha d’utilitzar per completar el següent programa.

#include <iostream>
#include <vector>
using namespace std;


///////////////////////////////////////////
//
// documentation and code of effi_last_pos 
// function must be here
//
///////////////////////////////////////////


//gets vector v from input chanel
void read_vector(vector<int>& v) {
    int n = v.size();
    for (int i = 0; i < n; ++i) cin >> v[i];
}


int main() {
    int n;
    cin >> n;
    vector<int> v(n);
    read_vector(v);
    int z;
    while (cin >> z)
        cout << effi_last_pos(v, z) << endl;
}

Punts examen: 1.750000 Part automàtica: 40.000000%

Entrada

L’entrada té tres parts. En la primera apareix un nombre enter n més gran que un. Després hi ha una llista de n enters ordenats de menor a major x0, x1, …, xn − 1 . Finalment, trobem una seqüència de nombres enters. Cada número z de l’última seqüència és tal que x0z i z < xn−1 .

Sortida

Per a cada nombre z de la seqüència, una línia amb l’última posició i on el valor de la llista xi no superi a z, és a dir xiz.

Observació

Les implementacions de la funció effi_last_pos que puguin tenir un temps d’execució proporcional a n seran invalidades.

Public test cases
  • Input

    10
    11 23 34 55 55 55 55 55 55 65 
    55
    15 
    48

    Output

    8
    0
    2
    
  • Input

    5
    123 345 1071 1100 1278
    1099
    345

    Output

    2
    1
    
  • Input

    30
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
    0

    Output

    28
    
  • Information
    Author
    Pro1
    Language
    Catalan
    Other languages
    Spanish
    Official solutions
    C++
    User solutions
    C++