Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zadanie z olimpiady

Ostatnio zmodyfikowano 2017-10-08 14:47
Autor Wiadomość
milmega
Temat założony przez niniejszego użytkownika
Zadanie z olimpiady
» 2017-10-08 12:07:19
Potrzebuję pomocy w zadaniu o treści:
Lew składa się z n części, a każda część składa się z kilku segmentów. Segmenty ponumerowane są w następujący sposób: te należące do pierwszej części mają numery od 1 do a1, do drugiej - od a1+1 do a1+a2, itd. Do której części należy dany segment?

Wejście
W pierwszej linii wejścia dana jest liczba n (1 ≤ n ≤ 100 000) - liczba części lwa. W drugiej linii wejścia dane jest n liczb całkowitch: a2, a2, ..., an (1 ≤ ai ≤ 1 000 000). W trzeciej linii dana jest liczba q (1 ≤ q ≤ 100 000) - liczba zapytań o dane segmenty. W ostatniej linii dane jest q liczb całkowitych - zapytania o kolejne segmenty.

Wyjście
Dla każdego zapytania należy wypisać w osobnej linii odpowiedź - w której części znajduje się ten segment.

Moj błędny kod poniżej. Potrzebuję wytłumaczenia co i dlaczego zrobiłem źle.
C/C++
#include<iostream>
using namespace std;

int main()
{
    int n, a, q, k;
    int m = 0;
    int s = 0;
    int j = 0;
    int segmenty = 0;
    cin >> n; //wczytuje ilosc elementow.
    int ele[ n ]; //tworze tablice o dlugosci n.
    while( n != 0 )
    {
        cin >> a; //wczytuje ilosc segmentow kazdego elementu po kolei.
        segmenty += a; //do zmiennej 'segmenty' przypisuje sume wszystkich segmentow.
        ele[ m ] = a; //do tablicy przypisuje ilosc segmentow dla danego elementu zeby pozniej wiedziec
        m++;
        n--;
    }
   
    int tab[ segmenty ];
    for( int i = 1; i <( n + 1 ); i++ )
    { // CALA PETLA MA ZADANIE
        while( ele[ j ] != 0 ) // DLA DANEGO ELEMENTU TABLICY 'tab' PRZYPISAC
        { // PRZYPISAC WARTOSC OD 1 DO N
            tab[ s ] = i; // CZYLI ZEBY KAZDY SEGMENT LWA
            s++; // MIAL W TABLICY WARTOSC ELEMENTU LWA W KTORYM SIE ZNAJDUJE
            ele[ j ] --; //
        }
        j++;
    }
    cin >> q; // wczytuje ilosc zapytan
    while( q != 0 )
    {
        cin >> k; // wczytuje zapytanie dla segmentu k   
        cout << tab[ k ] << endl; // wyswietlam wartosc elementu lwa do ktorego nalezy segment k 
        q--;
    }
   
    return 0;
}
P-165524
Saran
» 2017-10-08 12:30:12
Nazwy... Nazwy... Nazwy zmiennych, popraw proszę.
P-165525
Luq
» 2017-10-08 12:43:33
C/C++
int ele[ n ];
Tak nie można tworzyć tablic w C++. Rozmiar musi być znany w czasie kompilacji.

C/C++
for( int i = 1; i <( n + 1 ); i++ )
W tym miejscu n ma wartość zero, więc pętla się nawet nie wykona.
P-165526
milmega
Temat założony przez niniejszego użytkownika
» 2017-10-08 12:56:12
Wiem, że nie powinno się nazywać zmiennych pojedynczymi literami, ale to są tylko iteratory, które chciałem mieć wszystkie w jednym miejscu. A co do pętli to dodałem
C/C++
cin >> n;
int kopiaN = n;
 i
for( int i = 1; i <( kopiaN + 1 ); i++ )
P-165527
Saran
» 2017-10-08 14:47:30
int ele[ n ]

A l b o 'n' musi być stałą,
a l b o użyj pojemników dynamicznych,
std::vector <>
P-165530
« 1 »
  Strona 1 z 1