3569 - Cern

De la Universitas 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

Ş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

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

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

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

cern.in

A
1 320

cern.out

200 3

Explicație

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.

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}")