Witam!
Napisałem program dla tego zadania: http://pl.spoj.com/problems/AL_01_02/
Mieści się on w ramach czasowych, dla podanych przeze mnie danych wejściowych zwraca poprawne wyniki, jednak sędzia twierdzi że odpowiedź jest błędna. Sam już nie wiem co może być w tym programie źle.
Poniżej wklejam kod. Dodam jeszcze że jestem dopiero na 16 odcinku kursu Mirosława Zelenta, dlatego zdaję sobie sprawę, że ten kod może być napisany chaotycznie.
#include <iostream>
#include <cstring>
using namespace std;
void kolejka(char* n, int wskaznik, char* tab, int &pozycja, int dl)
{
int i=wskaznik; // wskaznik pokazuje miejsce od ktorego zaczynamy, a nastepnie miejsce wystepowania najsilniejszego zwierzecia
char*w=&n[wskaznik];
if(i<dl)
{
while(i<dl)
{
if(*w>n[wskaznik])
{
wskaznik=i; // ustalamy w jakiej pozycji tablicy znajduje sie najsilniejsze zwierze
}
if(*w=='z' || *w==tab[pozycja])
{
break; // dodalem te warunki, gdyz bez nich program przekracza limit czasu
}
i++;
w++;
}
tab[pozycja]=n[wskaznik]; // po zakonczeniu petli wpisujemy do tablicy tab, litere oznaczajaca znalezione najsilniejsze zwierze i dodajemy do pozycji 1
pozycja++;
wskaznik++;
kolejka(n,wskaznik,tab,pozycja,dl); // wywolujemy ta sama funkcje, tylko tym razem zaczynajac od miejsca w ktorym poprzednio bylo najsilniejsze zwierze + 1
}
}
int main()
{
int t; // liczba testow
cin >> t;
char *n; // tablica ze znakami
char *tab; // tablica z ostateczna kolejka
int ile = (10000000/t)+2;
n = new char [ile];
for(int i=0;i<t;i++)
{
tab = new char [ile];
cin >> n;
int pozycja=0; // pozycja do ktorej aktualnie zapisujemy litere w tablicy tab
int dlugosc = strlen( n );
kolejka(n,0,tab,pozycja,dlugosc);
for(int j=0;j<pozycja;j++)
cout << tab[j];
cout << endl;
delete [] tab;
}
delete [] n;
return 0;
}
Ogólnie zamysł programu jest taki, że ma wyszukać pozycję, na której znajduje się najsilniejsze zwierze i wpisze je do tablicy z kolejką. Jako że po wystąpieniu najsilniejszego zwierzęcia wszystkie przed nim uciekły, to kolejne wywołanie funkcji zaczynamy od pozycji tego zwierzęcia+1 i wyszukujemy kolejne najsilniejsze zwierze w tym mniejszym zbiorze. Być może jest jakiś przypadek dla którego to nie działa, ale nie udało mi się jeszcze takiego znaleźć.