Diferente pentru problema/snooker intre reviziile #3 si #29

Nu exista diferente intre titluri.

Diferente intre continut:

== include(page="template/taskheader" task_id="snooker") ==
Ronnie OSullivan 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 "The Rocket" O'Sullivan a înţeles în sfârşit că şi tacticile defensive sunt utile în jocul de snooker. Pentru a exersa, Ronnie şi-a cumpărat o masă de dimensiuni $(N+2)*(M+2)$, fără buzunare, şi un set format dintr-o bilă albă şi $K$ bile roşii, toate 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)$, iar o bilă plasată in colţul dreapta-sus va avea centrul la 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).
!problema/snooker?poza1.JPG!         !problema/snooker?poza2.JPG!
 
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ă să atingă vreuna din bilele roşii. Din cauza aranjamentului bilelor 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).
h3. 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
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ă fie lovită bila albă, astfel încăt să nu atingă nicio bilă roşie, iar centrul ei să ajungă în punctul $B$.
h2. 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$.
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 unei bile roşii.
h2. 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 trebuie lovită bila.
În fişierul de ieşire $snooker.out$ se va afişa un număr real, reprezentând măsura în radiani a unghiului sub care Ronnie trebuie lovească bila albă.
h2. Restricţii
* $1 ≤ N, M ≤ 1000$
* **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
* $10 ≤ N, M ≤ 100$
* $1 ≤ K ≤ 50$
* 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 există o soluţie pentru care bila albă loveşte manta de maxim $5$ ori.
* Se va accepta orice soluţie pentru care bila albă loveşte manta de maxim $10$ ori şi nu atinge nicio bilă roşie înainte să ajungă în punctul $B$.
* Se consideră că bila albă atinge o bilă roşie dacă distanţa de la centrul bilei roşii la traiectoria bilei albe este mai mică **strict** decât $2$ (de două ori raza $1$).
* Rezultatul se va verifica cu o precizie de $0.0001$.
 
!problema/snooker?atan2.jpg 60%!
 
* **Important!** Pentru afişarea răspunsului se recomandă utilizarea funcţiei $atan2(y, x)$ din librăria $cmath$, pentru programatorii $C/C++$, sau a funcţiei $arctan2(y, x)$, 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 (dinainte de lovirea unei mante) ş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':http://cplusplus.com/reference/clibrary/cmath/atan2/ şi pe 'FreePascal.org':http://www.freepascal.org/docs-html/rtl/math/arctan2.html
 
h3. Praguri de punctaj
 
* Pentru $20%$ din teste, lovitura se poate efectua direct.
* Pentru alte $20%$ din teste, lovitura trebuie efectuată cu minim o mantă.
* Pentru alte $15%$ din teste, lovitura trebuie efectuată cu minim două mante.
* Pentru alte $15%$ din teste, lovitura trebuie efectuată cu minim trei mante.
* Pentru alte $15%$ din teste, lovitura trebuie efectuată cu minim patru mante.
* Pentru alte $15%$ din teste, lovitura trebuie efectuată cu minim cinci mante.
h2. Exemplu
table(example). |_. snooker.in |_. snooker.out |
| This is some
  text written on
  multiple lines.
| This is another
  text written on
  multiple lines.
| 10 10 5 0 4 7
2
8 5
5 5
| 2.176341
|
h3. Explicaţie
...
Există $4$ răspunsuri corecte: $-2.480549, 2.480549, -2.176341, 2.176341$ (corespunzătoare unghiurilor $-142.09, 142.09, -124.68$ si respectiv $124.68$ de grade). Deoarece bila albă se află chiar lângă mantă, dacă lovim sub un unghi negativ (înspre mantă), bila alba va sări imediat şi va urma traiectoria dată de valoarea în modul a unghiului. Astfel, primele două răspunsuri corespund traiectoriei albastre, iar ultimele două corespund traiectoriei portocalii.
 
 
!problema/snooker?poza3.JPG!
== include(page="template/taskfooter" task_id="snooker") ==
 
== include(page="template/taskfooter" task_id="snooker") ==

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.