1 / 61
Oct 2015

Czy ten pomysl ma sens? i jak uzupelnic przedostatnią petle zeby dzialala, jak narazie wszystko co probowalem nie sumuje tych 2 tablic

//edit, jak sie zastanowilem to raczej nie ma, moze tylko dla 1 przykladu ze spoja by zadzialal, jakies sugestie? i jak sumowac te wskazniki ?

  • created

    Oct '15
  • last reply

    Jun '20
  • 60

    replies

  • 4.4k

    views

  • 18

    users

  • 10

    likes

  • 18

    links

Frequent Posters

There are 60 replies with an estimated read time of 7 minutes.

W tym 2 przypadku chodzi o to że jak nie pojedzie to nic nie straci smile
Robisz to jakoś strasznie skomplikowanie.Zadanie jest proste.Masz zapamiętać max z sumowania (tylko indeksy)
1
1 2
1 2 3
1 2 3.... n-1
1 2 3.... n-1 n
2
2 3
2 3 .... n-1
2 3 .... n-1 n
n-1 n
n
Gdy max jest ujemny to 0.

Co robisz źle, Stefan?
1. Źle wklejasz kod, w tej chwili pewnie mało komu będzie się chciało go czytać.
2. Żle, bo podejrzewam, że nie wiesz jaka jest róznica, między, int, long int i long long [int]
..
Dalej nie przeglądałem twojego kodu [patrz pkt 1.]

PS
A jednak znalazł się ktoś wink

PS 3
Tytuł postu, Stefan, nie jest zgodny, z przyjętym standartem. Sorry, jeżeli nieprawidłowo odgadłem twoje drugie imię, Stefan [Malchior]wink

To jak mam wkleić kod?

No nie dokonca max z sumowania, tylko polaczyc minimum 2 "miasta"w 1 przykladzie max z sumowania to 6 a prawidlowy wynik to 9 .

W treści zadania nic nie ma o 2 miastach.Można jedynie coś ominąć na początku i na końcu.Jak ominiesz 2 pierwsze i ostatni to jest 9.W drugim przykładzie jak ominiesz pierwszy i ostatni to masz 0.

AD 1. Jeżeli nie widzisz różnicy, między swoimi poszczególnymi wklejeniami, to.... to może to ja jestem ślepy?.

AD 2. Możliwe, że coś z moim wzrokiem jest faktycznie nie tak, bo czasami nie dostrzegam różnicy, tam gdzie Ty ją wyraźnie widzisz [między long i int], ale w takim razie może nic nie słyszałeś o jeszcze jednym typie: long long int? Może google: "różnica między long i long long c++" lub jakoś podobnie sformułowane pytanie?

No dobra jednak nie wiedzialem, ze long int = int ; Przepraszam ;/
// to dlaczego kompilator akceptuje zapis long int ?
Kod zadziałał po zmianie long int na long long .

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.

10 months later

Witam
mam problem z kodem
wykonuje go po raz któryś i przechodzi mi testy z zadania
a sędzia pokazuje "Błędna odpowiedź "

//jestem początkujący proszę o wyrozumiałość

w wątku już jest odpowiedź, choć nieco niejasna :slight_smile:

co zwróci twój program gdy będzie 100000 miast i w każdym zarobek 100000 ?

(możesz przetestować dla 10 miast, każde z zarobkiem 1000000000, trochę niezgodne ze specyfikacją, ale wynik podobny)

2 months later

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.

8 months later

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

skoro przekroczony limit czasu, to oznacza, że algorytm nie ten - więc poszukaj lepszego

16 MB to obecnie niewiele - nie trzeba się tym martwić - ale skoro to ci przeszkadza to możesz zrezygnować z tablic :slight_smile: (bo nic innego nie można zrobić w celu zmniejszenia zajętości pamięci)

6 months later

mógłbym prosić o podpowiedź? co jest tutaj źle?

Chociażby

Pierwsza linia wejścia zawiera jedną liczbę naturalną n (1≤n≤100 000)

A u Ciebie jest taka tablica do przechowania wejścia:

long long a[10000] = {};