Witam,
od niedawna stawiam swoje pierwsze kroki w C++ (w ogóle w programowaniu) i napotkałem na problem z jednym z zadań na SPOJ-u. Mianowicie, chodzi o to zadanie: http://pl.spoj.com/problems/AL_01_02/
Problem udało mi się rozwiązać (a przynajmniej tak mi się wydawało). Program działał w każdym przypadku, cokolwiek bym mu nie podał, nie wyrzucał żadnych błędów ani wyjątków. Kiedy jadnak wrzucam mój kod na SPOJ-a, to otrzymuję komunikat o przekroczeniu limitu czasu (co jest dziwne, bo na moim komputerze niezależnie od ilości podanych znaków (oczywiście mieszczących się w zakresie zadania) program wykonuje tę operacje w znacznie mniej niż 1s). Oto mój kod:
#include <iostream>
#include <string>
#include <cstring>
#include <list>
using namespace std;
long int t;
string kolejka;
void kolejkaFinal(char *cstr) {
list <char> mylist;
list<char>::iterator it1, it2, it3;
for (int i=0; i<kolejka.size(); i++) {
mylist.push_back(cstr[i]);
}
for (int i=0; i<kolejka.size(); i++) {
it1=it2=mylist.begin();
advance(it2, 1);
while (it2!=mylist.end()) {
if (*it1<*it2) {
it1=mylist.erase(it1);
}
else {
it1++;
it2++;
}
}
}
for (it3=mylist.begin(); it3!=mylist.end(); it3++) {
cout << *it3;
}
}
int main() {
cin >> t;
for (long int i=0; i<t; i++) {
cin >> kolejka;
char cstr[kolejka.size()+1];
strcpy(cstr, kolejka.c_str());
kolejkaFinal(cstr);
}
return 0;
}
Czy jest tutaj coś, co może powodować takie zachowanie algorytmu sprawdzającego na SPOJ-u, jakiś błąd lub coś co dałoby się usprawnić?
Jeśli ktoś przeczytał to w całości, to z góry dziekuję za poświęcony czas.
10^6 znaków (czyli ~1GB)
- coś tu rząd wielkości się nie zgadza