0242 - Interclas M: Difference between revisions
Pagină nouă: == 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 interclasm.in 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... |
|||
Line 80: | Line 80: | ||
# Verificare restricții | # Verificare restricții | ||
if not verificare_restricții(x, a, b): | if not verificare_restricții(x, a, b): | ||
print(" | print("Nu au fost respectate cerintele impuse.") | ||
return | return | ||
Revision as of 14:33, 10 December 2023
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 interclasm.in 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 interclasm.out va conține pe prima linie valorile determinate, separate printr-un spațiu.
Restricții și precizări
- 1 ⩽ x ⩽ 999.999
- 1 ⩽ n, m ⩽ 100.000
- valorile elementelor celor două șiruri vor fi mai mici decât 1.000.000
Exemplu 1
- interclasm.in
- 5
- 7
- 1 2 3 4
- 7 20 60
- 9
- 3 5 7
- 8 9 10 12
- 20 24
- interclasm.out
- 5 10 60
Exemplu 2
- interclasm.in
- 2
- 0
- 1
- 7
- interclasm.out
- Nu au fost respectate cerintele impuse
Rezolvare
<syntaxhighlight lang="python" line>
- 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("interclasm.in", "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("interclasm.out", "w") as file: file.write(" ".join(map(str, rezultat)))
if __name__ == "__main__":
main()
</syntaxhighlight>