3569 - Cern
„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
- 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>