0242 - Interclas M: Difference between revisions
Line 73: | Line 73: | ||
def main(): | def main(): | ||
# Citirea datelor de intrare | # Citirea datelor de intrare | ||
with open(" | with open("interclasmin.txt", "r") as file: | ||
x = int(file.readline().strip()) | x = int(file.readline().strip()) | ||
n = int(file.readline().strip()) | n = int(file.readline().strip()) | ||
Line 89: | Line 89: | ||
# Scrierea rezultatului în fișierul de ieșire | # Scrierea rezultatului în fișierul de ieșire | ||
with open(" | with open("interclasmout.txt", "w") as file: | ||
file.write(" ".join(map(str, rezultat))) | file.write(" ".join(map(str, rezultat))) | ||
Revision as of 12:55, 12 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
- 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
<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("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()
</syntaxhighlight>