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âte2
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ărQi
reprezentând întrebareai
;
Date de ieșire
Fișierul de ieșire maraton.out conţine:
Q
linii, liniai
reprezentând răspunsul la întrebareai
;
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 indicii2, 4, 5
. - La secunda
12
au trecut linia de sosire maratoniștii cu indicii2, 5
. - La secunda
7
au trecut linia de sosire maratoniștii cu indicii2, 5
. - La secunda
21
au trecut linia de sosire maratoniștii cu indicii2, 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 .
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!