9 / 61
Oct 2015

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] = {};

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])) {