ILOCAMP 2011, mijające się samochody

0

Link do deskrypcji zadania (opis zawiera kilka wzorów w obrazkach więc nie mogę bezpośrednio przekopiować)

http://main.edu.pl/pl/archive/ilocamp/2011/sam

Pokrótki opis zadania - należy obliczyć ile razy miną się samochody jadące w przeciwnych kierunkach (0 - wschód 1 - zachód).

Problem mieszczenia się w zakresie rozwiązany, program mieści się w czasie.

Ale źle liczy niektóre wejścia. I nie potrafię dociec dlaczego. Gdzie szukać błędu ?

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    long int licznik=0;
    long int n=0;
    long int j=0;
    long int i=0;
    long int c=0;
 
    cin >> n;  
    long int* s = NULL;               
    s = new long int[n]; 
    
    for (long int i=0; i<n; i++)
    {
    s[i] = 0; 
    } 
    
    if (n<1000000000)
    {
        
    while (i<n)
    {
        cin>>c;
        s[i]=c;
        i++;  
    }
    
    for (i=0; i<n; i++)
    {
    if (s[i]==0)
        {
        j++;
        }
    else licznik=licznik+j; 
    }
    
    }  
    cout<<licznik;
}

Wynik zgłoszenia programu do sprawdzenia:

user image

1

Tablice sa tu kompletnie niepotrzebne. No i jakbys spojrzal na out pod odpowiedziami to bys widzial ze zakres inta przekroczylo...

int main()
{
    unsigned long long int zeroCount = 0, result = 0, cars;
    bool direction, start = 0;
    cin >> cars;
    while(cars--)
    {
        cin >> direction;
        if(direction == 0 && start == 0)
            start = ~start;
        if(start)
        {
            if(direction == 0)
                zeroCount++;
            else
                result += zeroCount;
        }
    }
    cout << result;
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1