Rezolvare completă PbInfo #1594 Maraton

După ce și-a cumpărat biscuiți, Costy, eroul nostru, ajunge acasă și se apucă de teme. Astfel, dă peste următoarea problemă:

“La o probă de maraton participă N maratonişti. Ştiind că la secunda 0, un maratonist se află la Xi metri de linia de sosire și aleargă cu o viteză de Yi metri/secundă, să se răspundă la Q întrebări de tipul:

  • Câți maratonişti au trecut linia de sosire după Qi secunde ? “

Cerința

Ajutați-l pe Costy să răspundă la cele Q întrebări.

Date de intrare

Fișierul maraton.in conține:

  • pe prima linie numărul N, reprezentând numărul de maratoniști;
  • pe următoarele N linii, câte 2 numere, Xi Yi, reprezentând distanța fată de linia de sosire și viteza fiecărui maratonist;
  • pe următoarea linie, numărul Q reprezentând numărul de întrebări;
  • pe următoarele Q linii se află câte un număr Qi reprezentând întrebarea i;

Date de ieșire

Fișierul de ieșire maraton.out conţine:

  • Q linii, linia i reprezentând răspunsul la întrebarea i;

Restricții și precizări

  • 1 <= N, Q, Qi, Xi <= 100 000
  • 1 <= Yi <= 1000

Exemplu

maraton.in

5
100 4
12 3
101 5 
20 1
44 7
4
20
12
7
21

maraton.out

3
2
2
4

Explicație

  • La secunda 20 au trecut linia de sosire maratoniștii cu indicii 2, 4, 5.
  • La secunda 12 au trecut linia de sosire maratoniștii cu indicii 2, 5.
  • La secunda 7 au trecut linia de sosire maratoniștii cu indicii 2, 5.
  • La secunda 21 au trecut linia de sosire maratoniștii cu indicii 2, 3, 4, 5.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Maraton:

//Dragan Andrei Gabriel
//Univesity of Bucharest

#include <cstdio>
#include <cstring>

int n, sum[100001], X, Y, Q;

int main()
{
    freopen("maraton.in", "r", stdin);
    freopen("maraton.out", "w", stdout);

    scanf("%d", &n);

    for (int i = 1; i <= n; i++)
        {
            scanf("%d %d", &X, &Y);
            int aux = X / Y + (X % Y > 0);
            sum[aux] += 1;
        }

    for (int i = 1; i <= 100000; i++)
        sum[i] = sum[i] + sum[i - 1];

    scanf("%d", &Q);

    for (int i = 1; i <= Q; i++)
    {
        scanf("%d", &X);
        printf("%d\n", sum[X]);
    }

    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #1594 Maraton

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1594 Maraton de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!