0558 - Cartonase 2

De la Universitas MediaWiki

Cerința

Supărat că Gigel a reușit, cu ajutorul vostru ( vezi problema Cartonașe ), să refacă progresia aritmetică scrisă pe cele n cartonașe, maleficul Costel este hotărât să intervină din nou.

Astfel, observă că Gigel a notat din nou pe n cartonașe cei n termeni consecutivi ai unei progresii aritmetice. Profitând de lipsa acestuia, Costel a ascuns un număr oarecare de cartonașe și le-a amestecat pe celelalte.

La întoarcere, Gigel constată lipsa a m cartonașe și vă roagă să-l ajutați să afle care sunt valorile scrise pe cartonașele care lipsesc.

Date de intrare

Programul citește de la tastatură numerele n m, cu semnificația de mai sus, apoi n-m numere naturale, reprezentând valorile scrise pe cartonașele care nu au fost ascunse.

Date de ieșire

Programul va afișa pe ecran m numere ordonate crescător, separate prin exact un spaţiu, reprezentând valorile scrise pe cartonașele ascunse.

Restricții și precizări

  • 4 ⩽ n ⩽ 1.000
  • 1 ⩽ m ⩽ n-2
  • valorile scrise de Gigel pe cele n cartonașe 1.000.000.000
  • Costel nu va lua niciodată primul sau ultimul cartonaș

Exemplul 1

Intrare
6 2
13 19 7 4
Ieșire
Datele de intrare corespund restricțiilor impuse
10 16

Explicație

Cele șase numere scrise de Gigel erau 4 7 10 13 16 19. Dintre acestea, lipsesc două, și anume 10 și 16.

Exemplul 2

Intrare
3 2
Ieșire
Datele de intrare NU corespund restricțiilor impuse

Rezolvare

#0558 - Cartonase2

def validare_date(n, m):
    if not (4 <= n <= 1000):
        return False
    if not (1 <= m <= n - 2):
        return False
    return True


def rezolva_problema(n, m, cartonase_scrise):
    cartonase_scrise.sort()
    diferenta = (cartonase_scrise[-1] - cartonase_scrise[0]) // (n - 1)
    cartonase_lipsa = []
    for i in range(cartonase_scrise[0], cartonase_scrise[-1], diferenta):
        if i not in cartonase_scrise:
            cartonase_lipsa.append(i)
    return cartonase_lipsa[:m]


n, m = map(int, input("Introduceti n si m: ").split())
if validare_date(n, m):
    cartonase_scrise = list(map(int, input(f"Introduceti {n-m} numere scrise pe cartonase: ").split()))
    print("Datele de intrare corespund restricțiilor impuse")
    rezultat = rezolva_problema(n, m, cartonase_scrise)
    print(*rezultat)
else:
    print("Datele de intrare NU corespund restricțiilor impuse")
    exit(0)