0242 - Interclas M: Difference between revisions

From Bitnami MediaWiki
No edit summary
 
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 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.
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 interclasm.out va conține pe prima linie valorile determinate, separate printr-un spațiu.
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 ⩽ x ⩽ 999.999
*'''0 < x < 1.000.000'''
*1 &les; n, m &les; 100.000
*'''1 &les; n, m &les; 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
;'''interclasmin.txt'''
:2
:2
:0
:0
:1
:1
:7
:7
;interclasmout.txt
;'''interclasmout.txt'''
: Nu au fost respectate cerintele impuse
: Nu au fost respectate cerintele impuse
<br>
<br>

Latest revision as of 11:43, 5 January 2024

Cerința[edit]

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]

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]

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]

  • 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]

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]

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


Rezolvare[edit]

<syntaxhighlight lang="python" line>

  1. 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>