3569 - Cern

From Bitnami MediaWiki

„CERN este un acronim folosit pentru a desemna Laboratorul European pentru Fizica Particulelor Elementare. Acronimul s-a păstrat de la vechea denumire în limba franceză, şi anume Conseil Européen pour la Recherche Nucléaire. Acesta este cel mai mare laborator de cercetare a particulelor elementare din lume, situat în suburbia nord-vestică a Genevei, chiar pe graniţa dintre Elveţia şi Franţa. Funcţia primară a complexului CERN este de a furniza acceleratoare de particule elementare şi alte tipuri de infrastructuri necesare fizicii particulelor de energii înalte.”

Acceleratorul de particule CERN este dispus sub forma a 3 cercuri cu aceeaşi rază, tangente exterioare două câte două, numerotate pe figură cu 1, 2, 3. Traiectoria unei particule elementare porneşte din unul din punctele marcate pe figură cu A, B, C, D, E, F şi se deplasează cu viteză constantă de

/unitatea de timp numai pe circumferinţa cercurilor. La trecerea printr-un punct de tangenţă dintre două cercuri particula îşi schimbă atât sensul de deplasare, cât şi cercul pe care se deplasează. Astfel, dacă sensul de deplasare a fost la un moment dat trigonometric, la trecerea printr-un punct de tangenţă devine invers trigonometric şi dacă sensul de deplasare a fost invers trigonometric, la trecerea printr-un punct de tangenţă devine trigonometric.

Cerința[edit | edit source]

Ştiind că cercurile ce formează acceleratorul sunt marcate din grad în grad începând cu , în sens trigonometric (aşa cum se indică în figura alăturată), să se scrie un program, care, cunoscând punctul iniţial şi sensul de deplasare al unei particule, să determine poziţia particulei în accelerator după un număr dat de unităţi de timp.

Date de intrare[edit | edit source]

Prima linie a fişierului de intrare cern.in conţine un caracter p ce indică punctul de plecare al particulei.

A doua linie a fişierului de intrare conţine două numere întregi s şi t, separate printr-un spaţiu, ce indică sensul de deplasare (1 pentru sens trigonometric şi -1 pentru sens invers trigonometric), respectiv numărul de unităţi de timp cât durează deplasarea.

Date de ieșire[edit | edit source]

Pe prima linie a fişierului de ieşire cern.out se vor scrie două numere naturale g şi c, separate printr-un spaţiu, ce reprezintă numărul de grade, în sens trigonometric, respectiv cercul, corespunzătoare poziţiei finale unde se va găsi particula după trecerea celor t unităţi de timp.

Restricții și precizări[edit | edit source]

  • p ∈ {’A’,’B’,’C’,’D’,’E’,’F’}.
  • s ∈ {-1, 1}.
  • 0 ≤ t ≤ 1.000.000.000.
  • 0 ≤ g ≤ 359.
  • c ∈ {1, 2, 3}.
  • Pentru toate seturile de date de intrare, poziţia finală a particulei nu coincide cu unul dintre punctele de tangenţă dintre cercuri.

Exemplu:[edit | edit source]

cern.in

A
1 320

cern.out

200 3

Explicație[edit | edit source]

Particula pleacă din punctul A în sens trigonometric şi are traseul:

  • pe cercul 1 în sens trigonometric;
  • pe cercul 2 în sens invers trigonometric;
  • pe cercul 3 în sens trigonometric.

Poziţia finală este la pe cercul 3.

<syntaxhighlight lang="python" line="1"> def determine_position(start_point, start_circle, start_direction, time_units):

   # Define circle tangents in degrees
   tangents = {0, 120, 240}
   
   # Define movement per unit time
   movement_per_unit = 10
   
   # Initialize current position, circle and direction
   current_position = start_point
   current_circle = start_circle
   current_direction = start_direction
   
   # Perform movement for each time unit
   for _ in range(time_units):
       if current_direction == 'trigonometric':
           current_position = (current_position + movement_per_unit) % 360
       else:
           current_position = (current_position - movement_per_unit) % 360
           
       # Check if we hit a tangent point
       if current_position in tangents:
           # Change circle
           current_circle = 1 if current_circle == 3 else current_circle + 1
           # Change direction
           if current_direction == 'trigonometric':
               current_direction = 'inverse trigonometric'
           else:
               current_direction = 'trigonometric'
   
   return current_position, current_circle
  1. Example usage

start_point = 0 # Initial position in degrees start_circle = 1 # Starting on circle 1 start_direction = 'trigonometric' # Starting direction time_units = 30 # Number of time units

final_position, final_circle = determine_position(start_point, start_circle, start_direction, time_units) print(f"Final position: {final_position} degrees on circle {final_circle}") </syntaxhighlight>