1594 - Maraton

De la Universitas MediaWiki

Cerința

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

Date de intrare

Fișierul maratonin.txt 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 maratonout.txt 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

Exemplul 1

maratonin.txt
5
100 4
12 3
101 5
20 1
44 7
4
20
12
7
21
maratonout.txt
Datele introduse corespund restricțiilor impuse.
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.

Exemplul 2

maratonin.txt
6
100 4
12 3
101 5
20 1
44 7
200000 2
4
20
12
7
21
maratonout.txt
Datele introduse nu corespund restricțiilor impuse.

Rezolvare

# 1594 - Maraton
def validare(n_maratonisti, lista_maratonisti, n_intrebari, lista_intrebari):  # functia de validare
    if n_maratonisti > 100000 or n_intrebari > 100000:
        raise ValueError

    for distanta, viteza in lista_maratonisti:
        if distanta > 100000 or viteza > 1000:
            raise ValueError

    for intrebare in lista_intrebari:
        if intrebare > 100000:
            raise ValueError

    file_out.write("Datele de intrare corespund restrictiilor impuse\n")


def maraton(lista_maratonisti, lista_intrebari):  # functia de rezolvare
    rezultate_maraton = []
    for intrebare in lista_intrebari:
        nr_maratonisti_sositi = 0
        for distanta, viteza in lista_maratonisti:
            if distanta / viteza <= intrebare:
                nr_maratonisti_sositi += 1
        rezultate_maraton.append(nr_maratonisti_sositi)
    return rezultate_maraton


if __name__ == '__main__':
    file_in = open("maratonin.txt", "r")  # declararea fisierelor
    file_out = open("maratonout.txt", "w")  # fisierul out trebuie declarat cu optiunea "w" (write)

    try:
        nr_maratonisti = int(file_in.readline())
        maratonisti = []
        for _ in range(nr_maratonisti):
            x, y = map(int, file_in.readline().split())
            maratonisti.append((x, y))

        nr_intrebari = int(file_in.readline())
        intrebari = [int(file_in.readline()) for _ in range(nr_intrebari)]

        validare(nr_maratonisti, maratonisti, nr_intrebari, intrebari)  # apelul functiei de validare
        rezultate = maraton(maratonisti, intrebari)  # apelul functiei de rezolvare

        for rezultat in rezultate:
            file_out.write(str(rezultat) + "\n")

    except ValueError:
        file_out.write("Datele de intrare nu corespund restrictiilor impuse")
    except IndexError:
        file_out.write("Datele de intrare nu corespund restrictiilor impuse")