Informatică, întrebare adresată de pmarian98, 9 ani în urmă

#2630 permd

int PermD(int a[], int n)

Funcția primește ca parametru un vector a = (a1, a2, ..., an) de lungime n care memorează toate valorile distincte din mulțimea {1, 2,..., n-1}, dar exact una din aceste valori apare în vector de două ori. Funcția trebuie să returneze valoarea care apare de două ori.

Restricții și precizări
1 ≤ n ≤ 1.000.000
Numele funcției este PermD
Întotdeauna va exista exact o valoare care apare de două ori
Elementele din vector sunt indexate de la 1 la n



Exemplu
Dacă n = 6 și a = (3,5,2,1,2,4) atunci PermD(a, n) va returna valoarea 2.

Important
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

Răspunsuri la întrebare

Răspuns de boiustef
4

#include <bitset>

bitset<1000000>b;

int PermD(int a[], int n)

{

   int c;

   for (int i=1; i<n; ++i)

       if(b[a[i]]==0) b[a[i]]=1;

       else { c=a[i]; break;  }

   return c;

}


boiustef: răspund şi la întrebări... :)))
pmarian98: n-am inteles partea cu b[a[i]]=1;
boiustef: a[] este vectorul sursă in care se caută elementul care e prezent de două ori, iar vectorul b este un vector caractersistic pe biţi de dimensiunea 1000000 (ca si a elementelor din a).
boiustef: In vectorul b vom pune 1 dacă întîlnim prima dată elementul şi dacă a[i] este de ex 102 şi el nu a fost înzâlnit la parcurgere adică b[a[i]]==0, atunci lui b[102]=1 şi dacă mai întîlnim un element 102 pe locul căruia in b deacum nu e 0, altfel c=a[i]; adică am găsit elementul care se repetă
Sper că am fost explicit ;)))
pmarian98: gen ca la Vectorii caracteristici
boiustef: corect... b şi este un vector caracteristic în care se poate pune 0 / 1
boiustef: bitset
Alte întrebări interesante