0242 - Interclas M

De la Universitas MediaWiki

Cerința

Se dă un număr natural x și două șiruri a și b, cu n, respectiv m elemente, numere naturale, ordonate strict crescător. Să se afișeze, în ordine crescătoare, multiplii lui x care se află doar în unul dintre cele două șiruri.

Date de intrare

Fișierul de intrare interclasmin.txt conține pe prima linie numărul x, pe linia a doua numărul n; urmează n numere naturale, ordonate crescător, ce pot fi dispuse pe mai multe linii. Linia următoare conține numărul m și urmează m numere naturale, ordonate crescător, ce pot fi dispuse pe mai multe linii.

Date de ieșire

Fișierul de ieșire interclasmout.txt va conține pe prima linie valorile determinate, separate printr-un spațiu.

Restricții și precizări

  • 0 < x < 1.000.000
  • 1 ⩽ n, m ⩽ 100.000
  • valorile elementelor celor două șiruri vor fi mai mici decât 1.000.000

Exemplu 1

interclasmin.txt
5
7
1 2 3 4
7 20 60
9
3 5 7
8 9 10 12
20 24
interclasmout.txt
5 10 60


Exemplu 2

interclasmin.txt
2
0
1
7
interclasmout.txt
Nu au fost respectate cerintele impuse


Rezolvare

#0242 - InterclasM
def multiplii_x_unice(x, a, b):
    rezultat = set()

    i, j = 0, 0

    while i < len(a) and j < len(b):
        if a[i] % x == 0 and b[j] % x != 0:
            rezultat.add(a[i])
            i += 1
        elif a[i] % x != 0 and b[j] % x == 0:
            rezultat.add(b[j])
            j += 1
        elif a[i] < b[j]:
            i += 1
        else:
            j += 1

    while i < len(a) and a[i] % x == 0:
        rezultat.add(a[i])
        i += 1

    while j < len(b) and b[j] % x == 0:
        rezultat.add(b[j])
        j += 1

    return sorted(list(rezultat))

def verificare_restricții(x, a, b):
    if not (0 < x < 1000000):
        return False
    for numar in a + b:
        if numar >= 1000000:
            return False
    return True

def main():
    # Citirea datelor de intrare
    with open("interclasmin.txt", "r") as file:
        x = int(file.readline().strip())
        n = int(file.readline().strip())
        a = [int(file.readline().strip()) for _ in range(n)]
        m = int(file.readline().strip())
        b = [int(file.readline().strip()) for _ in range(m)]

    # Verificare restricții
    if not verificare_restricții(x, a, b):
        print("Nu au fost respectate cerintele impuse.")
        return

    # Calculul multipliilor lui x care se află doar într-unul dintre șiruri
    rezultat = multiplii_x_unice(x, a, b)

    # Scrierea rezultatului în fișierul de ieșire
    with open("interclasmout.txt", "w") as file:
        file.write(" ".join(map(str, rezultat)))

if __name__ == "__main__":
    main()