Witam. Tak po jakimś czasie wszedłem sobie na SPOJ'a, aby porozwiązywać zadania i je popoprawiać ( w sensie szybkość algorytmów ). Niektóre udało mi się przyspieszyć do czasu 0.00. Niestety tutaj w tym, mimo iż zrobiłem najprościej jak się da, mam czas 0.13. Dodam jeszcze, że używałem obiektów cin i cout. Gdzieś słyszałem, że są one wolniejsze od funkcji wczytywania i wypisywania z języka C. Mógłby ktoś powiedzieć jak to przyspieszyć tymi funkcjami?
PS. Wiem, że był gdzieś taki wątek na starym forum, ale z tego co widzę to zostało już całkowicie usunięte.
Jest problem z maszyną, na którym stoi stare forum, wróci gdy naprawią ten problem. Według mnie swoje pytanie powinieneś napisać nie w wątku z zadaniem tylko w nowym. Dlatego krótko - tu masz "słynny: przykład od Rafała Nowaka ze starego forum: http://www.rafalnowak.pl/wiki/index.php?title=IO65
Jeśli to mało to poszukaj innych funkcji z przyrostkiem _unlocked albo spróbuj wczytać dane raz funkcją fread() i operować na wczytanym buforze.
Witam ja również mam problem z tym zadaniem na początku gdy zrobiłem to na tablicach to dostałem bład wykonania SIGSEGV więc później zrobiłem to zadanie przy pomocy vectorów ale dostaje błąd że odpowiedź błędna. Zrobiłem to również przy pomocy wskaźników ale to samo... błędna odpowiedź. Mam również pytanie w jakiej kolejności system sprawdza czy zadanie jest AC bo to by na pewno pomogło w poszukiwaniu błędów. A poniżej kod:
edit: nie ma kodu
Jeżeli sumazestaw jest typu long long, to jakiego typu elementy powinien zawierać wektor?
Tak naprawdę, nie musisz zapuisywać tych wyników do tablicy-wektora, tylko w takim wypadku, od razu je wypisywać na stdout [ na zmianę czytasz i wypisujesz].
Jeżeli jednak zapisujesz, to chociaż poniższa linijka jest poprawna:
Powyższa linijka powinna, moim skromnym zdaniem wyglądać tak:
for (int i = 0; i < tab.size(); ++i) cout << tab[i] << endl;
Jeżeli umieszczasz tu kod, to oczyść go ze zbędnych komentarzy i pseudokomentarzy, a po AC skasuj.
Spoj sprawdza plik wzorcowy, z plikiem "wyprodukowanym" [przekierowanie do pliku stdout] przez twój program.
Witam. Zrobiłem to zadanie lecz SPOJ wyrzuca mi błąd SIGSEGV wiem że związany jest z tym że przekroczyłem dozwoloną pamięć, ale nie wiem jak to jeszcze bardziej uprościć. Na ideone kod działa. Link do kodu : http://ideone.com/8wS6nC37 Z góry dziękuje za pomoc.
- Jeżeli nie uzyskałeś AC, to trudno to nazwać zrobieniem zadania.
- WIem, że nic nie wiem? Błąd związany jest [w tym wypadku], że sam sobie podcinasz gałąź na której siedzisz. Możesz zadeklarować tablicę int wielkości dwieście tysięcy i program się skompiluje i uruchomi bez problemu i bez zgrzytów i jęczenia. Gdy jednak deklarujesz tablicę wielkości 25 elementów - skąd u licha wziąłeś taką wartość?, to nie dziw się, że program Ci się wywala z błędem SIGSEGV - tych liczb jest wielokrotnie więcej niż 25. Czy te upraszczanie, to użycie short zamiast int, lub long long? W takim razie nie upraszczaj, tylko komplikuj swój program. Na ideonie działa? Dziwne. Ale w takim razie wklej tam takie same testy jakie są na SPOJ'u i zobacz czy też będzie działał, bo na takich mikroskopijnych danych, jakie tam wkleiłeś to nie dziwota, że działa.
A jeżeli chodzi o prawdziwe uproszczenie programu, to można całkowicie zrezygnować, z zapisywania wszystkiego do tablicy, a w zamian na bieżąco na zmiaę wczytywać, obliczać, wypisywać jeżeli trzeba i dalej wczytywać kolejne liczby.
PS
Pod zadaniem były komentarze-podpowiedzi - ale jak widać nie skorzystałeś - w takim razie są one tam [były] zbędne i niepotrzebne - więc je skasowałem.
Witam, proszę o pomoc ponieważ kod wydaje mi się dobry, testy też wychodzą dobre a spoj wyrzuca mi Błędną odpowiedź.
include
using namespace std;
int suma, liczba, sumaG;
int main()
{
while(cin >> liczba)
{
if (liczba==0)
{cout << suma << endl;
sumaG+=suma;
if (suma==0)
cout << sumaG << endl;
suma=0;}
suma+=liczba;
}
return 0;
}
Mój prastary kod z printf i scanf dał… 0,26 s
Ale to z okresu, kiedy byłem skłonny kopiować cudze kody AC by na własne oczy przekonać się, że to ja robię coś źle, a nie SPOJ oraz by móc oglądać lepsze od moich kody.
Albo 4 lata temu w ciągu 2 min utworzyłem zupełnie dziki kod ze scanfami i printfami, w co nie wierzę.