Witam, pisałem ostatnio program, który jest rozwiązaniem pewnego zadania z pewnego serwisu. To jest jednak mniej ważne. Chodzi o to, że na serwisie automatyczna "sprawdzarka" powiedziała, że program przekracza limit czasowy. Czy jest jakiś sposób na przyśpieszenie tego kodu? Spróbowałem nawet na tę okazję nauczyć się wskaźników, ale nic nie dały. Może źle ich użyłem? To mój kod ...
#include <iostream>
using namespace std;
unsigned long ile;
unsigned long tempOdleglosc = 1000000;
int main()
{
cin >> ile;
unsigned long *koralik = new unsigned long [ile];
unsigned long *k_index_2 = koralik;
unsigned long *k_index_3 = koralik;
for(unsigned long i = 0; i < ile; i++){
cin >> *koralik;
k_index_2 = k_index_3;
if(i > 0){
for(unsigned long z = 0; z < i; z++){
unsigned long odleglosc = i - (z+1);
if(odleglosc < tempOdleglosc){
if(*k_index_2 == *koralik){
if(odleglosc < tempOdleglosc){
tempOdleglosc = odleglosc;
}
}
}
k_index_2++;
}
}
koralik++;
}
cout << tempOdleglosc << endl;
return 0;
}
a zadanie polega na tym, że :
Mamy n koralików ustawionych w pewnej kolejności, wśród których każdy ma określony kolor. Teraz należy powiedzieć w jakiej minimalnej odległości są dwa koraliki tego samego koloru, gdzie odległosć między dwoma koralikami jest rozumiana jako liczba koralików, które znajdują się między nimi. Można bezpiecznie założyć, że zawsze istnieją przynajmniej dwa koraliki tego samego koloru. Pierwsza liczba jaką pobieram to N czyli ta ilość koralików(maks. 10 do potęgi 5), a potem pobieram w pętli koraliki. Każdy koralik ma kolor który ma być w programie określony cyfrą (maks 10 do potęgi 9). Muszę podać najmniejszą możliwą odległość takich samych koralików.
Z góry dziękuję za fatygę :)