właśnie nie rozumiem za bardzo z czego to wynika, bo w kompilatorze na komputerze normalnie pokazuje 0, tak samo jak sie wejdzie w edycje na ideone i da te same dane
https://i.imgur.com/NyDX6lD.png7
Nie wiem z czego to wynika, ale chwilowo możesz dodać wyświetlanie ‘0’ jeżeli wszystkie liczby były niedodatnie.
Z pozostałych kwestii masz temp++;
zarówno w if
jak i w else
bez żadnych warunków więc w zasadzie… po co Ci to tam?
Zawsze:
if(warunek) {
instrukcje;
temp++;
} else {
instrukcje;
temp++;
}
możesz zamienić na:
if(warunek) {
instrukcje;
} else {
instrukcje;
}
temp++;
o ile nie da się wyjść z pętli inaczej.
Rzeczy tego typu
if (sumy[0] < 0)
sumy[0] = 0;
if (sumy[temp - 1] < 0)
sumy[temp - 1] = 0;
mogłeś robić już przy wczytywaniu
A później to już Twoja rola by dowiedzieć się czemu się 0
nie wyświetla lub jakoś je inaczej wyświetlić.
Ok, po dłuższym szukaniu mam test którego nie przechodzisz:
100
-1134
-684
-668
10697
1675
8745
10773
-10453
2371
9348
-6341
-6601
7495
-7494
-6797
-3498
9153
-9393
-3123
-8980
-5236
-2849
-6769
-6057
10439
-7197
6211
-5093
11853
-3117
-8056
8501
2369
1186
10440
256
-1827
-4867
9302
5827
5033
-5450
6704
-2324
9372
4362
8661
-3113
-6002
8383
-11248
4326
4852
-8704
-10169
786
5706
-10909
-705
-3142
9876
10015
8326
-5272
-3470
-2253
2927
11219
-4024
2874
-2252
-9130
5928
-6089
-10343
6052
8286
5516
-5143
6651
-4468
8556
8299
10324
-3467
-4459
-7147
6703
-11424
2133
8079
-6579
-10824
4907
492
-5840
-1836
-6115
2888
7750
Twoja odpowiedź: 62585
Moja odpowiedź: 85051
Oraz kolejny:
40
-238
-854
753
793
855
-77
53
-42
-523
-424
983
113
-544
812
-134
608
206
-544
-302
-510
-597
-650
12
-612
421
-750
918
-827
721
-821
-678
-90
528
-354
-819
-576
938
-686
-65
-668
Twoja odpowiedź: 2401
Moja odpowiedź: 3432
I już wiem gdzie masz błąd w swoim programie, ale sam go musisz znaleźć. Natomiast dowód, że prawidłową odpowiedzią jest 3432
:
753 + 793 + 855 - 77 + 53 - 42 - 523 - 424 + 983 + 113 - 544 + 812 - 134 + 608 + 206 = 3432.
Niewyświetlanym zerem zaś nie musisz się przejmować, po prostu daj cout << sumy[0] << endl;
PS. Gdy już naprawisz odezwij się na PW, to Ci wyślę swój kod i spojrzysz jak można to było zrobić prościej.
“Przekroczono limit czasu”
Domyślam się, że to przez to, że używam tablicy, ale nie potrafię sobie wyobrazić jak to ma działać bez tablicy. Pomoże ktoś?
Problemem jest tutaj nie to czy użyjesz tablicy czy nie ale jak. Jeżeli wczytasz wszystko [do tablicy] i [tylko] jednorazowo ją “przejrzysz” zmieścisz się w limicie czasu. Ale jeżeli tylko do tego ma służyć tablica, to można sobie wyobraźić, że nie jest konieczna. Możemy od razu, jednorazowo, przeglądnąć wejście, bez zapisywania wszystkiego do tablicy…
Praktyka czyni mistrza, więc na początek popraktykuj na takim, twoim kawałku kodu - popraw go:
cin>>t;
for(int a=1; a<=t; a++)
{
cin>>tab[a-1];
suma+=a;
}
i objaśnij o co tu chodzi, w kontekście tego zadania!?
Tak, ale …
czyż w matematyce [informatyce] nie 1 + 2 + … + n == n * (n+1) / 2
no i przyjżyj się dokładniej samej pętli:
for (int a = 1; a <= t; a++)
<-- nie można inaczej, lepiej [chyba, że za bardzo skupiłeś się na zmiennej suma] ,
a potem tab[a] zamiast tab[a-1]j?
W C++ zamiast tablic można i używa się często vektora, więc można:
cin >> t;
vector <int> tab(t);
for (int i = 0; i < t; ++i)
cin >> tab[i];
lub, też w C++ ale może dopiero w nowszych wersjiach kompilatora:
cin >> t;
vector <int> tab(t);
for (auto &i : tab)
cin >> i;
Tyle, że rozpatrywanie wszystkich przypadków = TLE - przekroczenie limitu czasu.
Tutaj chciałem wpisywanie do tablicy oraz sumowanie dać w jednym forze, żeby kodu było mniej.
Dlatego taki a nie inny for.
Co do vectorów, to jeszcze tego nie poznałem, ale na pewno trochę o tym poczytam.
Sugerując się twoim poprzednim postem, napisałem nowy kod13. Wydaje mi się, że jest znacznie lepszy, co prawda jeszcze go nie doszlifowałem bo sędzia pokazuje błędną odpowiedź Ale chyba o tym pisałeś prawda?
EDIT:
dodałem
if(zysk<1) { cout<<"0"<<endl; return 0; }
Też mi się tak wydaje, ale nadal masz za dużo razy przeglądanie tablicy.
Musisz wymyśleć taki kod [algorytm] w którym naprawdę tylko raz przeglądasz tablicę od początku do końca. Jeżeli przy wczytywaniu szukasz najlepszego miasta, to traktuję taką sytuację jako pierwsze przeglądanie tablicy. Dlaczego? Bo gdy jest tylko wczytywanie do tablicy, swojego rodzaju bufora, [pojemnika], kompilator prawdopodobnie potrafi to “samodzielnie” zoptymalizować - przy ustawionych opcjach optymalizacji. Gdy przy okazji wczytywania jest coś robione dodatkowo, może być już trochę gorzej.
Przy oddzielnych przeglądaniach od najlepszego w dół , a potem w górę dochodzi, może niewielki, ale jednak koszt zorganizowania pętli, a przy okazji zaciemnia to czytelność kodu. Na początku zakładasz zysk = 0, więc może być on tylko lepszy lub pozostać dalej zerowy, przy poprawnie napisanym kodzie. Nie potrzebne jest więc dodatkowe sprawdzanie, a także [błędne?] zerowanie obliczonego już wcześniej zysku, [w kilku miejscach twojego kodu].
Napisałem, tylko że nie jest niezbędna. A że czas się zmienił, to nic dziwnego, raz będzie tak innym razem tak, ale chyba nie chodzi Ci tylko i wyłącznie o czas i o AC?
Jeżeli jednak zależy Ci na czasie, to mozesz dodać linijkę ios::sync_with_stdio (0);
Jeżeli chcesz, mogę Ci wysłać “wygładzony” twój kod na priv.