#!/usr/bin/python # coding: utf-8 import sys # Pozice bojovníků si přečteme ze souboru, dotazy budou ze standardního vstupu with open('bojovnici.in') as inp: # Co řádek, to bojovník. Řádek se rozsekne na dvě „slova“ a ta se převedou na integery. bojovnici = map(lambda radek: map(int, radek.split()), inp.readlines()) # Jak moc velká čísla jsou na vstupu? limit = max(map(lambda radek: map(abs, radek))) def zlomek(cit, jmen): """ Reprezentace zlomku hodnotou blízkou limit*limit*cit/jmen. Díky tomu, že se různé zlomky liší alespoň o 1/(limit²), dostanou různé hodnoty, zatímco stejné zlomky (i nezkrácené) dostanou stejné. """ return (limit * limit * cit) / jmen def smer(od, do): """ Směr z jednoho bodu do druhého. """ if od == do: # Střelba do vlastních return None x = do[0] - od[0] y = do[1] - od[1] dolu = (y < 0) or (y == 0 and x < 0) return (dolu, zlomek(x, y)) def bojovnik(pozice): """ Odpovědi pro jednoho zafixovaného střelce. """ smery = map(lambda cil: smer(pozice, cil), bojovnici) shluk = {} # dict v pythonu je hashovací tabulka # Prozatím nikdo v zákrytu vysledek = [False] * len(bojovnici) for i in range(0, len(smery)): sm = smery[i] if sm in shluk: # Už tímhle směrem někdo je. Oba jsou v zákrytu. vysledek[i] = True vysledek[shluk[sm]] = True else: shluk[sm] = i return vysledek odpovedi = map(bojovnik, bojovnici) for dotaz in sys.stdin: [a, b] = map(int, dotaz.split()) print(odpovedi[a-1][b-1]) # -1, neboť Python indexuje od 0