362
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ă
Qisecunde ? “
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
Nlinii, câte2numere,Xi Yi, reprezentând distanța fată de linia de sosire și viteza fiecărui maratonist; - pe următoarea linie, numărul
Qreprezentând numărul de întrebări; - pe următoarele
Qlinii se află câte un numărQireprezentând întrebareai;
Date de ieșire
Fișierul de ieșire maraton.out conţine:
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
20au trecut linia de sosire maratoniștii cu indicii2, 4, 5. - La secunda
12au trecut linia de sosire maratoniștii cu indicii2, 5. - La secunda
7au trecut linia de sosire maratoniștii cu indicii2, 5. - La secunda
21au trecut linia de sosire maratoniștii cu indicii2, 3, 4, 5.
# include <iostream>
# include <fstream>
# define MAX_X 100000
using namespace std;
ifstream fin("maraton.in");
ofstream fout("maraton.out");
int f[MAX_X + 5];
int main()
{
int N , Q , x , y , q , i;
fin >> N;
for ( i = 0; i < N; i ++ )
{
fin >> x >> y;
f[x / y + ( x % y > 0 )] ++;
}
for ( i = 1; i <= MAX_X; i ++ )
f[i] += f[i - 1];
fin >> Q;
for ( i = 0; i < Q; i ++ )
{
fin >> q;
fout << f[q] << '\n';
}
fin.close();
fout.close();
return 0;
}
Comentarii