2448 - Pătrate3: Difference between revisions

From Bitnami MediaWiki
Dragos1234 (talk | contribs)
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/1473/grupapregatitoare] == Cerinţa == Cei n elevi de la grupa pregătitoare au primit câte două cartonaşe, fiecare cartonaş având scris pe el un număr natural. Ei s-au aşezat în cerc şi, la un semnal dat, fiecare a scos la întâmplare un cartonaş din buzunar. Copiii vă roagă să răspundeţi la următoarele întrebări: 1. Care poate fi suma maximă S a numerelor de pe cartonaşele scoase, ştiind că produsul acestora este...
 
Dragos1234 (talk | contribs)
No edit summary
Line 1: Line 1:
Sursa: [https://www.pbinfo.ro/probleme/1473/grupapregatitoare]
Sursa: [https://www.pbinfo.ro/probleme/2248/coordonate]
== Cerinţa ==
== Cerinţa ==
Cei n elevi de la grupa pregătitoare au primit câte două cartonaşe, fiecare cartonaş având scris pe el un număr natural. Ei s-au aşezat în cerc şi, la un semnal dat, fiecare a scos la întâmplare un cartonaş din buzunar. Copiii vă roagă să răspundeţi la următoarele întrebări:
Cei n elevi de la grupa pregătitoare au primit câte două cartonaşe, fiecare cartonaş având scris pe el un număr natural. Ei s-au aşezat în cerc şi, la un semnal dat, fiecare a scos la întâmplare un cartonaş din buzunar. Copiii vă roagă să răspundeţi la următoarele întrebări:

Revision as of 12:20, 9 April 2023

Sursa: [1]

Cerinţa

Cei n elevi de la grupa pregătitoare au primit câte două cartonaşe, fiecare cartonaş având scris pe el un număr natural. Ei s-au aşezat în cerc şi, la un semnal dat, fiecare a scos la întâmplare un cartonaş din buzunar. Copiii vă roagă să răspundeţi la următoarele întrebări: 1. Care poate fi suma maximă S a numerelor de pe cartonaşele scoase, ştiind că produsul acestora este divizibil cu un număr prim p? 2. Care poate fi lungimea maximă L a unei secvenţe de copii de pe cerc pentru care suma numerelor de pe cartonaşele scoase de către oricare doi vecini din secvenţă este pară?

Date de intrare

Fișierul de intrare grupapregatitoare.in conține pe prima linie numerele n şi p, iar pe următoarele n linii câte două numere naturale reprezentând numerele de pe cartonaşele fiecărui elev, în ordinea în care s-au aşezat pe cerc

Date de ieșire

Programul va afișa pe ecran, mesajul "Datele introduse corespund cerințelor" si fișierul de ieșire grupapregatitoare.out va conține pe prima linie numărul S, iar pe a doua linie numărul L. În caz contrar programul va afișa pe o linie noua mesajul "Datele introduse nu corespund cerintelor.".

Restricţii şi precizări

  • 3 ⩽ n ⩽ 2000
  • 2 ⩽ p ⩽ 1000
  • numerele de pe cartonaşele elevilor sunt nenule şi mai mici decât 1001
  • există cel puţin un număr divizibil cu p pe un cartonaş

Exemplul 1

Intrare
grupapregatitoare.in
3 7
1 2
21 4
5 6
Ieșire
grupapregatitoare.out
29
3


Exemplul 2

Intrare
grupapregatitoare.in
100000000 1000000
1 2
21 4
5 6
Ieșire
grupapregatitoare.out
Datele introduse nu corespund cerintelor.


Rezolvare

<syntaxhighlight lang="python" line>

  1. 2248

def is_valid_input(n, x, y, v):

   if not (1 <= n <= 20000):
       print("Datele introduse nu corespund cerintelor.")
       exit()
   if not (1 <= x <= n) or not (1 <= y <= n):
       print("Datele introduse nu corespund cerintelor.")
       exit()
   if not (1 <= v <= n ** 2):
       print("Datele introduse nu corespund cerintelor.")
       exit()
   return True


def calculate_coordinates(n, x, y, v):

   # Verifică dacă intrările sunt valide
   if not is_valid_input(n, x, y, v):
       return None
   # Calculează coordonatele folosind formulele din program
   coord_x = (x - 1) * n + y
   coord_y = v // n if v % n == 0 else v // n + 1
   coord_z = n if v % n == 0 else v % n
   return (coord_x, coord_y, coord_z)


def main():

   n = int(input())
   x = int(input())
   y = int(input())
   v = int(input())
   # Calculează coordonatele folosind funcția definită anterior
   coords = calculate_coordinates(n, x, y, v)
   if coords is None:
       print("Input invalid")
   else:
       # Afișează coordonatele separate printr-un spațiu
       print("Datele introduse corespund cerintelor.")
       print(coords[0], coords[1], coords[2])


main() </syntaxhighlight>

Explicatie rezolvare