Chciałem, abyś znalazł w goglach, bo może byłoby to lepiej objaśnione. Moje szczątkowe wyjaśnienie: http://discuss.spoj.com/t/833-dwumiany/10085/3
PS
Oczywiście nie masz za co przepraszać no i twój system jest pewnie [mój tak] 64 bitowy?
Chciałem, abyś znalazł w goglach, bo może byłoby to lepiej objaśnione. Moje szczątkowe wyjaśnienie: http://discuss.spoj.com/t/833-dwumiany/10085/3
PS
Oczywiście nie masz za co przepraszać no i twój system jest pewnie [mój tak] 64 bitowy?
Rozwiązałem już kilkanaście zadań na Spoj i to jest pierwsze które sprawia mi kłopot.Nie jestem już pewien czy je dobrze zrozumiałem.Rozwiązałem je na 2 sposoby i cały czas otrzymuję "błędną odpowiedź".
#include <iostream>
using namespace std;
int main() {
int n;
int t[100000];
long long suma=0;
long long max=0;
int miasto=0;
cin>>n;
for(int i = 0; i < n ; i++) {
cin>>t[i];
suma+=t[i];
}
max=suma;
for(int i = 0; i<n ; i++) {
suma-=t[i];
if(suma>max) {
max=suma;
miasto=i;
}
}
suma=max;
for(int i = n-1; i>=miasto ; i--){
suma-=t[i];
if(suma>max)
max=suma;
}
cout<<max<<endl;
return 0;
}
Drugie rozwiązanie:
Oba rozwiązują wszystkie testy jakie udało mi się zdobyć i wymyśleć
A sprawdziłeś kod dla testów z komentarzy ? :
in: 1000 -800 999 -800
out: 1199
in: 105 -150 108 -50
out: 108
in: 101 5 -150 5 100 -50 3
out: 106
in: 2 -1 2 -1 2 -1 2
out: 5
in: 100 5 -150 5 100 3 -4
out: 108
in: 100 -3000 -5000 -3000 -9000 100 -200 -10000
out: 100
in: 100 5 -105 4 100 -1 -1 -1 -112 130
out: 130
Zadanie rozwiązane.Zadziałało drugie rozwiązanie.Wystarczyło skasować jedno else... Test który pokazał błąd to:
in: -1 -2 5 -10 -20
out: 5
Nadal nie wiem dlaczego to pierwsze rozwiązanie nie chce działać.Mam jeszcze jedną uwagę.Limit czasu jest bardzo mały gdy korzysta się z cin>>.
(program wykonywał się przez 0.1s a limit to 0.117s .) Dlatego lepiej zastosować scanf.
Podrzućcie jeszcze kilka zestawów testowych ponieważ te które są podane program przechodzi pozytywnie i nie ma problemu z dużymi liczbami.
Ciągle mam błędną odpowiedź, kodu nie wrzucam ponieważ moim zdaniem jest prawidłowy.
Wyniki mam poprzez początkowo usunięciu ujemnych liczb z obu końców tablicy, pogrupowaniu najdłuższych ciągów liczb o tym samym znaku, następnie wyszukaniu największego sąsiedztwa liczby ujemnej, zsumowaniu dodatnich liczb w najdłuższym ciągu a następnie odjęcie ujemnych które były po drodze.
Dla przykładów mam prawidłowe wyniki.
Czy jest kto w stanie powiedzieć co jest nie tak z kodem?
Wszystkie testy są poprawne ale przekroczony limit czasu. Jak można zmniejszyć ilość wymaganej pamięci (zaraz wynosi ona 16M!!). Z góry Dziękuję...
http://ideone.com/JY31qr32
Stefan, co robię źlę?
Ja nie Stefan, a chociażby, co oznacza, każdy, powinien wiedzieć. W kodzie jest dużo więcej złych rzeczy.
Chociażby niepotrzebne i nieumiejętne używanie zmiennych globalnych, chociaż, akurat to nie ma wpływu na sędziego, tylko na pewnego bad guy’a Jak czysto pisać w C++
dziękuje za rady co do kodu, ale to chyba nie jego estetyka wpływa na brak AC, najlepiej prosiłbym o podanie jakiegoś testu, którego program nie wykonuje, sam takiego nie umiem znaleźć niestety
zmieniłem warunki w tym miejscu
for (int x=0; x<temp-2 && temp!=1; x+=2){
if(sumy[x]+sumy[x+1]+sumy[x+2]>=max(sumy[x], sumy[x+2])) {
@pawkot mylisz się, to estetyka najczęściej na to wpływa. To przez wygląd kodu, brak poprawnie nazwanych zmiennych, niestosowanie wcięć itp. nie możesz znaleźć gdzie jest błąd. Najważniejsze byś pisał kod tak czytelnie, że gdy wrócisz do niego po pięciu latach to po chwili będziesz wiedział co i jak robi.
#include<iostream>
using namespace std;
int main()
{
const int myconst = 10;
double p[myconst];
float temp;
int as;
for(as = 0; as < myconst; ++as)
{
cout << "Wpisz cene: ";
cin >> temp;
if (temp==int(3>3)){
} else
{
p[as]=temp
}
}
cout << endl <<
"Ceny w odwrotnej kolejnosci" << endl;
for (as = myconst; as > 0; --as)
cout << p[as] << " ";
cout << endl;
return 0;
}
Znajdź błąd w powyższym kodzie. Przesadzony przykład, ale idea jest taka: chcesz pisać kod zawierający mniej błędów? Pisz jak najbardziej czytelnie się da. Na drugim miejscu postaw poprawne działanie. Zwróci Ci się koszt tej inwestycji gdy będziesz miał coś poprawić.
Co do kodu… nie wiem o co w nim chodzi, jaka idea przyświecała, nic z niego nie pojmuję, ale przede wszystkim działa źle dla danych z zadania to możesz sprawić aby przeszło ten pierwszy test:
W pracy jeszcze nie dostałem ochrzanu za to, że mój kod nie działa lub działa źle, bo wtedy podchodzi ktoś mądrzejszy ode mnie i po chwili patrzenia w ładnie napisany kod mówi mi “o tu zapomniałeś dodać tych dwóch zmiennych”, a ja mówię “o kurcze faktycznie, dzięki”. Były jednak sytuacje, że mój kod działał niemal perfekcyjnie, ale było tam tak narzygane pod względem wyglądu tego kodu, że ani nikt mi nie chciał pomóc, ani ja sam nie doszedłem o co tam chodzi chociaż pisałem to wczoraj i musiałem przepisywać od początku. Najgorsza tragedia mnie spotyka jak napisałem coś niechlujnie i zadziałało tak jak powinno. Rok później trzeba zmienić działanie, dostosować do nowych wymagań, a ja tydzień płaczę nad własnym kodem dlaczego napisałem to tak jakbym był naćpany i nie potrafię nic zmodyfikować.
faktycznie chyba troche sobie nie zdawałem sprawy z istotności estetyki (jestem dosyc początkująćy i takie rzeczy wydawały mi sie raczej błahe), ale przekonałeś mnie, będe przykładał do tego większą wage
co do kodu trochę go naprawiłem i spróbowałem go chociaż troche "uprzyjaźnić"
tak się prezentuje na chwile obecną, teraz przechodzi wszystkie testy zarówno z zadania jak i z komentarzy
https://ideone.com/ArhJdg12
Lepiej z kodem, chociaż jeszcze daleko mu do doskonałości - postaraj się nie nazywać zmiennych a
, n
, x
- chyba, że w pętli for
, tam jest wybaczalne.
Co do testu, którego nie przechodzisz to śmiem twierdzić, że nie przechodzisz jednego testu z zadania:
link5,
a jakbyś się chciał dalej zainteresować dobrze napisanym kodem, to:
clean code5
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