Reorganize a vector X12559


Statement
 

pdf   zip

Write a function reorganize_vector(v,a,b) that receives a vector v=(v0,...,vn1)v = (v_0,...,v_{n-1}) of integers and two integers aba \le b as parameters, and returns a vector ww that contains the same elements as vv but reorganized as follows: on the first positions of ww there are the elements viv_i such that vi<av_i<a (and preserving their original respective order in vv between them), next there are the elements viv_i such that aviba\leq{}v_i\leq{}b (again preserving the original order in vv), and finally the elements viv_i satisfying b<vib<v_i (again preserving the original order in vv).

For example, for v=[3,6,2,7,5,1,4,3,1,7,2,5,6,4,3]v=[3,6,2,7,5,1,4,3,1,7,2,5,6,4,3], a=3a=3, b=5b=5, the subvector of elements strictly smaller than aa is [2,1,1,2][2,1,1,2], the subvector of elements between aa and bb is [3,5,4,3,5,4,3][3,5,4,3,5,4,3], and the subvector of elements strictly greater than bb is [6,7,7,6][6,7,7,6]. Thus, the function must return w=[2,1,1,2,3,5,4,3,5,4,3,6,7,7,6]w=[2,1,1,2,3,5,4,3,5,4,3,6,7,7,6].

Your submission must use the following C++ code, modifying only the parts that are explicitly indicated.

#include <iostream>
#include <vector>

using namespace std;

// Returns a vector of size n > 0 with n integer values read from cin.
vector<int> read_vector(int n) {
    vector<int> v(n);
    for (int i = 0; i < n; ++i)
       cin >> v[i];
    return v;
}

// Prints a vector of size n > 0 in the cout.
void print_vector(const vector<int>& v) {
    for (int i = 0 ; i < int(v.size()) ; ++i) {
        if (i>0) cout<<" ";
        cout<<v[i];
    }
    cout<<endl;
}

// add functions or procedures here if you need them

// see the statement of the problem
vector<int> reorganize_vector(const vector<int>& v,int a,int b)
{
    // Write your implementation here.
}

int main() {
    int n;
    while (cin >> n) {
         vector<int> v = read_vector(n);
         int a, b;
         cin >> a >> b;
         print_vector(reorganize_vector(v, a, b));
   }
}

========================================================
CASTELLANO
========================================================
Escribe una función reorganize_vector(v, a, b) que recibe un vector v=(v0,,vn1)v=(v_0,\ldots,v_{n-1}) de enteros y dos enteros aba \le b como parámetros, y devuelve un vector ww que contiene los mismos elementos que vv pero reorganizados como sigue: las primeras posiciones de ww contienen los elementos viv_i tales que vi<av_i < a (preservando su orden original respectivo en vv), a continuación vienen los elementos viv_i tales que aviba \le v_i \le b (nuevamente preservando su orden original en vv) y finalmente están los elementos viv_i tales que b<vib < v_i (nuevamente preservando su orden original en vv).

Por ejemplo, para v=[3,6,2,7,5,1,4,3,1,7,2,5,6,4,3]v=[3,6,2,7,5,1,4,3,1,7,2,5,6,4,3], a=3a=3 y b=5b=5, el subvector de elementos estrictamente menores que aa es [2,1,1,2], el subvector de elementos entre aa y bb es [3,5,4,3,5,4,3], y el subvector de elementos estrictamente mayores que bb es [6,7,7,6]. Por lo tanto, la función debe devolver w=[2,1,1,2,3,5,4,3,5,4,3,6,7,7,6]w=[2,1,1,2,3,5,4,3,5,4,3,6,7,7,6].

Tu envío (submission) debe utilizar obligatoriamente el código en C++ dado más arriba, modificando sólo las partes explícitamente indicadas.

========================================================
CATALÀ
========================================================
Escriu una funció reorganize _vector(v, a, b) que rep un vector v=(v0,,vn1)v = (v_0, \ldots, v_{n-1}) d’enters i dos enters aba \le b com paràmetres, i retorna un vector ww que conté els mateixos elements que vv però reorganitzats com segueix: les primeres posicions de ww contenen els elements viv_i tals que vi<av_i < a (preservant el seu ordre original respectiu en vv), a continuació vénen els elements viv_i tals que aviba \le v_i \le b (novament preservant el seu ordre original en vv) i finalment hi ha els elements viv_i tals que b<vib < v_i (novament preservant el seu ordre original en vv).

Per exemple, per v=[3,6,2,7,5,1,4,3,1,7,2,5,6,4,3]v = [3,6,2,7,5,1,4,3,1,7,2,5,6,4,3], a=3a = 3 i b=5b = 5, el subvector d’elements estrictament menors que aa és [2,1,1,2], el subvector d’elements entre aa i bb és [3,5,4,3,5,4,3 ], i el subvector d’elements estrictament més grans que bb és [6,7,7,6]. Per tant, la funció ha de retornar w=[2,1,1,2,3,5,4,3,5,4,3,6,7,7,6]w = [2,1,1,2,3,5,4,3,5,4,3,6,7,7,6].

El teu enviament (submission) ha d’utilitzar obligatòriament el codi en C ++ donat més amunt, modificant només les parts explícitament indicades.

Exam score: 2.5 Automatic part: 100%

Input

The input is a sequence of cases. Each case is described with three lines. The first line has an integer n>0n > 0. The second line has nn integers, that is the contents of a vector vv of size nn, and the third line has two more integers aa and bb holding aba \le b.

========================================================
CASTELLANO
========================================================
La entrada es una secuencia de casos. Cada caso se describe en tres líneas. La primer línea contiene un entero n>0n > 0. La segunda línea contiene nn enteros, el contenido del vector vv de tamaño nn, y la tercera línea contiene dos enteros más, aa y bb, tales que aba \le b.

========================================================
CATALÀ
========================================================
L’entrada és una seqüència de casos. Cada cas es descriu en tres línies. La primera línia conté un enter n>0n > 0. La segona línia conté nn enters, el contingut del vector vv de mida nn, i la tercera línia conté dos enters més, aa i bb, tals que aba \leq b.

Output

For each case, the program outputs the contents of the resulting vector from a call reorganize_vector(v, a, b) followed by a line break. Two consecutive elements are separated by a white space.

========================================================
CASTELLANO
========================================================
Para cada caso, el programa imprime el contenido del vector retornado por la llamada reorganize_vector(v, a, b), seguidos por un salto de línea. Cualquier par de elementos consecutivos se imprimen separados por un espacio en blanco.

========================================================
CATALÀ
========================================================
Per a cada cas, el programa imprimeix el contingut del vector retornat per la crida reorganize_vector(v, a, b), seguits per un salt de línia. Qualsevol parell d’elements consecutius s’imprimeixen separats per un espai en blanc.

Public test cases
  • Input

    15
    3 6 2 7 5 1 4 3 1 7 2 5 6 4 3
    3 5
    10
    4 -3 5 7 1 4 8 6 5 -7
    3 5
    10
    4 -3 5 7 1 4 8 6 5 -7
    -10 -9
    10
    4 -3 5 7 1 4 8 6 5 -7
    2 3
    10
    4 -3 5 7 1 4 8 6 5 -7
    9 15
    10
    4 -3 5 7 1 4 8 6 5 -7
    -10 3
    10
    4 -3 5 7 1 4 8 6 5 -7
    6 15
    

    Output

    2 1 1 2 3 5 4 3 5 4 3 6 7 7 6
    -3 1 -7 4 5 4 5 7 8 6
    4 -3 5 7 1 4 8 6 5 -7
    -3 1 -7 4 5 7 4 8 6 5
    4 -3 5 7 1 4 8 6 5 -7
    -3 1 -7 4 5 7 4 8 6 5
    4 -3 5 1 4 5 -7 7 8 6
    
  • Information
    Author
    PRO1
    Language
    English
    Official solutions
    Unknown.
    User solutions
    C++