Spunem că un vector este palindrom de tip vale dacă sunt indeplinite urmatoarele două condiţii :
- elementele egal depărtate de capetele vectorului sunt egale
- valorile sunt în ordine descrescătoare de la capătul din stânga la mijlocul vectorului şi apoi sunt crescătoare până la capătul din dreapta
De exemplu vectorul cu elementele 10 7 4 3 3 4 7 10 îndeplineşte condiţiile de mai sus.
Să se verifice dacă cele n valori numere naturale din fişierul de intrare pot fi rearanjate astfel încăt să formeze un vector palindrom de tip vale.
Dacă este posibil se va afişa în fişierul de iesire vectorul obţinut
Dacă nu este posibil se va afişa -1
Date de intrare
- de pe prima linie a fişierului palindrom.in se citeşte n număr natural.
- de pe următoarea linie se citesc n numere naturale
Date de ieşire
În fişierul palindrom.out se va afişa după caz:
Dacă se poate forma vectorul palindrom de tip vale :
- pe prima linie se afişează elementele vectorului obţinut separate printr-un spaţiu
Dacă nu se poate forma vectorul palindrom de tip vale :
- pe prima linie valoarea -1
Restricţii şi precizări
1 ≤ n ≤ 10000
Răspunsuri la întrebare
Răspuns:
#include <iostream>
using namespace std;
int main(void)
{
int n, i, cnt=0, aux, fv[10000] = {0};
cin >> n;
int *v = new int[n];
for(i = 0; i < n; i++) {
cin >> aux;
fv[aux]++;
}
for(i = 0; i <= 10000; i++) {
if(!fv[i]) {
continue;
} else if(fv[i] == 2) {
v[n/2 - cnt - 1] = v[n/2 + cnt] = i;
cnt++;
} else {
cout << -1;
return 0;
}
}
for(i = 0; i < n; i++)
cout << v[i] << ' ';
return 0;
}
Explicație:
1. Cred ca nu ai introdus toate restrictiile, fiindca nu se precizeaza cat de mari pot fi numerele din vector, asa ca am considerat 10000 maximul.
2. Te las pe tine sa pui ofstream si ifstream pentru fisier, eu am facut cu cin si cout.
3. Cand ai spus numere "descrescatoare", am considerat ca numerele nu pot fi egale (de exemplu, 3 3 2 2 3 3 va fi un vector invalid).
Oricum, sper ca te-am ajutat la aceasta problema!