Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2012-06-13 11:27:37.
Revizia anterioară   Revizia următoare  

 

Fişierul intrare/ieşire:snooker.in, snooker.outSursăJunior Challenge 2012
AutorVlad GavrilaAdăugată dejuniorcJunior Challenge juniorc
Timp execuţie pe test0.1 secLimită de memorie20480 kbytes
Scorul tăuN/ADificultateN/A

Vezi solutiile trimise | Statistici

Snooker

Ronnie "The Rocket" O'Sullivan a înţeles în sfârşit că şi defensiva este utilă în jocul de snooker. Pentru a exersa această tactică, Ronnie şi-a cumpărat o masă de dimensiuni (N+2)*(M+2), fără buzunare, dotată cu o bilă albă şi K bile roşii, toate bilele având raza 1. Colţul din stânga-jos al mesei are coordonatele (-1, -1) iar colţul dreapta-sus are coordonate (N+1, M+1). Observăm astfel că o bilă plasată in colţul stânga-jos va avea centrul la coordonatele (0, 0). Analog, centrul unei bile plasată în dreapta-sus va avea coordonatele (N, M).

Ronnie se va antrena în felul următor: el plasează cele K bile roşii pe masă, toate în puncte de coordonate naturale. Apoi, Ronnie îşi alege două puncte A şi B de coordonate naturale (Xa, Ya), respectiv (Xb, Yb). El plasează bila albă cu centrul în punctul A şi încearcă să o lovească cu tacul astfel încât, după ce rulează pe masă, ea să se oprească cu centrul în punctul B, fără ca, pe traiectorie, să fi atins vreuna din bilele roşii. Din cauza poziţiilor în care se află bilele roşii, se poate ca lovitura să nu se poată efectua direct, ci doar cu manta. Masa cumpărată de Ronnie este de o calitate superioară, încât bila albă sare din mantă sub acelaşi unghi sub care a fost lovită (vezi figura).

Cerinţă

Dându-se N, M, coordonatele punctelor A şi B, numărul K de bile roşii precum şi coordonatele acestora, să se determine unghiul sub care trebuie să plece bila albă, astfel încăt să nu atingă nicio bilă roşie, iar centrul ei să ajungă în punctul B.

Date de intrare

Fişierul de intrare snooker.in va conţine pe prima linie şase numere naturale: N, M, Xa, Ya, Xb, Yb. Pe a doua linie se va afla numărul natural K. Pe fiecare dintre următoarele K linii se va afla o pereche de numere (x, y) reprezentând coordonatele bilelor roşii.

Date de ieşire

În fişierul de ieşire snooker.out se va afişa un număr real X, reprezentând măsura, în radiani, a unghiului sub care Ronnie trebuie să lovească bila albă.

Restricţii

  • 10 ≤ N, M ≤ 100
  • 1 ≤ K ≤ 100
  • Toate numerele din datele de intrare sunt naturale.
  • Manta se defineşte ca fiind marginea înălţată a mesei, mai exact conturul dreptunghiului cu colţurile în punctele (-1, -1) şi (N+1, M+1).
  • Se garantează că pentru fiecare din teste problemei există o soluţie pentru care bila albă atinge manta de maxim 5 ori.
  • Se va accepta orice soluţie pentru care bila albă atinge manta de maxim 10 ori şi nu atinge nicio bilă roşie înainte să ajungă în punctul B.
  • Rezultatul se va verifica cu o precizie de 0.0001.
  • Important! Pentru afişarea răspunsului se recomandă utilizarea funcţiei atan2 din librăria cmath, pentru programatorii C/C++, sau a funcţiei arctan2, pentru programatorii Pascal. Ambele funcţii primesc parametrii y şi x şi returnează valoarea în radiani a unghiului facut de punctul (x, y) cu originea (0, 0). Având un punct (X, Y) aflat pe traiectoria iniţială a bilei albe şi punctul (Xa, Ya), răspunsul pe care trebuie să îl afişaţi este atan2(Y-Ya, X-Xa) sau arctan2(Y-Ya, X-Xa). Mai multe detalii despre cele 2 functii gasiti pe C++ Reference şi pe FreePascal.org

Exemplu

snooker.insnooker.out
This is some
text written on
multiple lines.
This is another
text written on
multiple lines.

Explicaţie

...

Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?