0242 - Interclas M: Difference between revisions
No edit summary |
|||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== Cerința == | == 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. | 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 == | == Date de intrare == | ||
Fișierul 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 == | == Date de ieșire == | ||
Fișierul 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 == | == Restricții și precizări == | ||
*1 | *'''0 < x < 1.000.000''' | ||
*1 ⩽ n, m ⩽ 100.000 | *'''1 ⩽ n, m ⩽ 100.000''' | ||
*valorile elementelor celor două șiruri vor fi mai mici decât 1.000.000 | *valorile elementelor celor două șiruri vor fi mai mici decât '''1.000.000''' | ||
== Exemplu 1 == | == Exemplu 1 == | ||
;interclasmin.txt | ;'''interclasmin.txt''' | ||
:5 | :5 | ||
:7 | :7 | ||
Line 19: | Line 19: | ||
:8 9 10 12 | :8 9 10 12 | ||
:20 24 | :20 24 | ||
;interclasmout.txt | ;'''interclasmout.txt''' | ||
:5 10 60 | :5 10 60 | ||
<br> | <br> | ||
== Exemplu 2 == | == Exemplu 2 == | ||
; | ;'''interclasmin.txt''' | ||
:2 | :2 | ||
:0 | :0 | ||
:1 | :1 | ||
:7 | :7 | ||
; | ;'''interclasmout.txt''' | ||
: Nu au fost respectate cerintele impuse | : Nu au fost respectate cerintele impuse | ||
<br> | <br> | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
Line 72: | 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 88: | 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))) | ||
Latest revision as of 11:43, 5 January 2024
Cerința[edit | edit source]
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[edit | edit source]
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[edit | edit source]
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[edit | edit source]
- 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[edit | edit source]
- 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[edit | edit source]
- interclasmin.txt
- 2
- 0
- 1
- 7
- interclasmout.txt
- Nu au fost respectate cerintele impuse
Rezolvare[edit | edit source]
<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>