Matura informatyka maj 2025, zadanie 3 (Dron) — rozwiązanie

Gotowe odpowiedzi do wszystkich podpunktów Drona plus dwie pułapki z klucza CKE — wartości bezwzględne przy NWD i test środka odcinka bez ułamków.

Najważniejsza rzecz w całym zadaniu: plik daje przesunięcia, nie pozycje. Punkty toru budujesz sumą narastającą, startując z (0, 0). Kto tego nie zauważy, liczy wszystko dalej na złych danych.

Arkusz CKE — maj 2025, rozszerzony

Przygotowanie danych

ruchy = []
with open('dron.txt') as f:
    for linia in f:
        A, B = map(int, linia.split())
        ruchy.append((A, B))

punkty = []
x = y = 0
for A, B in ruchy:
    x += A; y += B
    punkty.append((x, y))

Dalej wszystko jest geometrią na liczbach całkowitych — bez float, bez zaokrągleń.

Zadanie 3.1 — ile przesunięć ma NWD większe od 1

def nwd(a, b):
    while b:
        a, b = b, a % b
    return a

ile = 0
for A, B in ruchy:
    if nwd(abs(A), abs(B)) > 1:
        ile += 1
print(ile)

Kontrola na dron_przyklad.txt: 6

Odpowiedź dla dron.txt: 40

Zadanie 3.2a — punkty ściśle wewnątrz kwadratu

ile = sum(1 for (px, py) in punkty if 0 < px < 5000 and 0 < py < 5000)

Kontrola na dron_przyklad.txt: 2

Odpowiedź dla dron.txt: 24

Zadanie 3.2b — trójka punktów, jeden jest środkiem odcinka

Środek odcinka ma współrzędne będące średnią końców, ale dzielenie przez 2 wprowadza ułamki. Mnożysz obie strony przez 2 i testujesz na liczbach całkowitych.

n = len(punkty)
for k in range(n):
    for i in range(n):
        for j in range(i+1, n):
            if i != k and j != k:
                xm, ym = punkty[k]
                x1, y1 = punkty[i]
                x2, y2 = punkty[j]
                if x1 + x2 == 2*xm and y1 + y2 == 2*ym:
                    print(punkty[i], punkty[k], punkty[j])

Kontrola na dron_przyklad.txt: (14000, 3014), (16000, 2010), (18000, 1006)

Odpowiedź dla dron.txt:

(5832, 1801), (7410, 1990), (8988, 2179)

Sto punktów i potrójna pętla to około miliona operacji — na maturze w zupełności akceptowalne. Nie szukaj sprytniejszego algorytmu.

Gdzie tracisz punkty

  • Brak wartości bezwzględnych w 3.1. Przesunięcie w pionie bywa ujemne. Klucz CKE wprost wymienia błędne warianty: 26 przy pominięciu ujemnych, 39 albo 41 przy złym potraktowaniu pary z zerem. Poprawnie jest 40.
  • <= zamiast < w 3.2a. „Ściśle wewnątrz" znaczy bez krawędzi. Punkt o x = 5000 się nie liczy.
  • Test środka na float. (x1+x2)/2 == xm potrafi zawieść przez nieprecyzyjność. Mnożenie przez 2 jest dokładne.
  • Dopisywanie if na NWD(a, 0). Euklides zwraca to sam — gdy b = 0, pętla się nie wykonuje.

Ten sam wzorzec w innych arkuszach

Suma narastająca i „geometria na intach" to chwyty, które warto zapamiętać na stałe:

Z tego samego arkusza: zad. 1 (przestaw), zad. 5 (dodawanie binarne).


Mnożenie przez 2 zamiast dzielenia, żeby nie wpuścić float do zadania z liczbami całkowitymi — jeden z tych trików, które rozwiązują więcej niż jedno zadanie. Reszta w Variancie.

Wariant — kurs maturalnyKup kurs