Informatică, întrebare adresată de cristeaandreea6480, 8 ani în urmă

Problema #3902 SortSum de pe pbinfo. Incerc sa o rezolv de 2 zile dar mereu depasesc limita de timp


andrei750238: Ce fel de sortare ai folosit ? Sortarile bubblesort, insertion sort, selection sort au complexitate mare, dureaza mult.

Iti sugerez sa incerci sa implementezi quicksort. (sau heapsort / merge sort).

Cea mai simpla varianta ar fi sa folosim sortarea din standardul C++ si sa scriem o functie pentru comparare.
andrei750238: Si trebuie retinuta si suma cifrelor undeva sa nu o mai calculezi de fiecare data

Răspunsuri la întrebare

Răspuns de misterL
0

Răspuns:

#include <fstream>

#include <algorithm>

using namespace std;

ifstream f("sortsum.in");

ofstream g("sortsum.out");

int a[1000002], x, n;

int sum(int n)

{

int s = 0;

while (n)

{

  s += n % 10;

  n /= 10;

}

return s;

}

int main()

{

while (f >> x)

{

  a[n++] = sum(x) * 10000000 + 10000000 - x;

}

sort(a, a + n);

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

{

  g << 10000000 - a[i] % 10000000 << " ";

}

f.close();

g.close();

return 0;

}

Explicație:

Aici ai o rezolvare a problemei folosind functia sort (poti folosi si qsort daca doresti).

In loc sa folosim o functie de comparare cmp ca parametru pentru sort, am decis sa facem o mica smecherie pentru numerele cu valori a sumei cifrelor egale, marindu-le foarte mult, iar dupa aceea scazand din ele nr initial pentru a forma astfel numere diferite ce vor fi ordonate de sort.

Alte întrebări interesante