12 / 49
Jul 2017

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.

Domyślam się, skąd wynikło napisanie pętli w taki sposób, ale i tak kompilator, wydaje mi się, zrobi to t ak, aby obliczenis tab.size() było jednokrotne. Jeżeli używasz c++14, możesz taką pętlę zapisać np tak:
for (auto i : tab)
cout << i << endl;

lub
for (auto &i : tab)
cout << i << endl;

11 days later

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.

  1. Jeżeli nie uzyskałeś AC, to trudno to nazwać zrobieniem zadania.
  2. 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.

1 year later

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;
}

przychodzi admin do lekarza
admin: panie doktorze, ostatnio wątroba mnie boli, chyba nie działa prawidłowo
lekarz: co pan powie, a u mnie działa prawidłowo

czy ten dowcip może z czymś ci się kojarzy ?

PS: jaki wynik dostaniesz dla danych:

2 -2 3 -3 4 -4 0
7 -7 8 -8 0
0

Po każdym zestawie wyświetla dwa 0. Czyli w tym może być problem

6 months later

mnie bardzie ciekawi, jak można uzyskać czas powyżej 0,1 sekundy :slight_smile: - oczywiście bez wstawiania zbędnych instrukcji

bo program w C/C++ używający scanf() i printf() wykonuje się w 0.02 s
sądzę, że używając cin/cout będzie to około 0.06 s

Mój prastary kod z printf i scanf dał… 0,26 s :wink:

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ę.

na iostream właśnie uzyskałem 0,1 a na cstdio pętla mnie pokonała

mój tez kiedyś tyle dał - ale dziś puściłem ponownie i jest 0,02 :slight_smile:

6 months later

A ja mam pytanie bo nie rozumiem treści a nie mam szklanej kuli. Z fusów też nie potrafię wywróżyć. Skąd mam wiedzieć który zestaw danych jest ostatni żeby zakończyć program i wyświetlić sumę wszystkich zestawów? W treści nie jest to napisane.

Twój program ma działać dopóki podawane są dane. Tak zwane wczytywanie nieokreślonej liczby danych. Było to już na forum poruszane, również w tym wątku da się znaleźć jak to zrobić.

Ale ja pytam kiedy wyświetlić SUMĘ wszystkich zestawów danych

No zdecyduj się.

  1. Wczytujesz nieokreśloną liczbę danych
  2. Ileś ich tam jest
  3. Kiedyś tam się skończą
  4. Jak się skończą to wyświetl sumę
  5. Przecież sam napisałeś, że masz wyświetlić sumę wszystkich zestawów jak dane się skończą

A w treści jest to wyraźnie napisane:

Na samym końcu należy dodatkowo podać sumę wszystkich wczytanych z wejścia liczb

Ja nie wiem czy to jest tak trudno zrozumieć co mam na myśli? Kiedy jest ten moment że skończył się ostatni zestaw? Albo inaczej bo znów nie zrozumiesz. Skąd wiadomo że jakiś tam zestaw jest ostatni i nie będzie po nim już następnego?