Cerință
Lucraţi la o firmă care produce microprocesoare. Pentru asamblarea microprocesoarelor, firma utilizează un robot constituit dintr-un singur braţ. Braţul este fixat la unul dintre capete („umărul”) într-un punct plasat în centrul platformei de lucru, iar la celălalt capăt are un dispozitiv de lungime neglijabilă cu care poate „culege” componentele de pe platforma de lucru („mâna”). Braţul se poate mişca numai în plan orizontal, deasupra platformei de lucru.
Braţul este constituit dintr-o succesiune de segmente rigide de lungimi , conectate prin puncte de articulaţie. Mai exact, segmentul , este conectat printr-un punct de articulaţie în umărul robotului, segmentul este conectat printr-un punct de articulaţie de segmentul , , segmentul este conectat printr-un punct de articulaţie de segmentul şi are la celălalt capăt „mâna”. Un punct de articulaţie permite rotaţia liberă (la orice unghi) a segmentului conectat în acel punct de articulaţie.
Pentru asamblarea unui microprocesor robotul trebuie să culeagă succesiv componentele acestuia de pe platforma de lucru. Fiecare componentă are o poziţie bine determinată pe platforma de lucru, prin coordonatele sale relativ la un sistem de coordonate cartezian, cu centrul în umărul robotului.
Rolul dvs. în firmă este de a programa mişcările robotului. În acest scop, pentru fiecare componentă pe care robotul o va culege trebuie să specificaţi „configuraţia” braţului robotului care să permită atingerea componentei respective (mâna robotului să fie plasată deasupra poziţiei în care se află componenta).
Configuraţia braţului robotului este definită de unghiurile dintre segmentele braţului rigid.
Scrieţi un program care, pentru o poziţie dată, determină o configuraţie pentru braţul robotului care să-i permită acestuia să culeagă componenta din poziţia respectivă, dacă este posibil.
Date de intrare
Fişierul de intrare robot.in
conţine pe prima linie un număr natural , care reprezintă numărul de segmente din care este format braţul robotului.
Pe fiecare dintre următoarele linii se află câte un număr natural. Numărul aflat pe linia este lungimea celui de-al -lea segment al braţului robotului.
Pe ultima linie se află două numere întregi şi , separate prin câte un spaţiu, reprezentând coordonatele poziţiei la care trebuie să ajungă „mâna” robotului.
Date de ieşire
Fişierul de ieşire robot.out
conţine o singură linie pe care se află valoarea dacă nu este posibil ca mâna robotului să ajungă în poziţia . Dacă problema are soluţie, fişierul de ieşire conţine linii. Pe linia se află valoarea reală care reprezintă unghiul dintre segmentul şi segmentul (pentru orice de la 2 la N), iar valoarea reprezintă unghiul pe care segmentul îl formează în umărul robotului cu axa OX.
Restricții și precizări
- Unghiurile se măsoară în sens trigonometric şi sunt exprimate în grade.
- Programul de evaluare va verifica dacă punctul în care este plasată mâna robotului pentru configuraţia dată de dvs. coincide cu punctul de coordonate cu o eroarea admisă.
- Orice linie se termină cu un marcaj de sfârşit de linie (Enter).
Exemplul 1
robot.in
3
10
5
25
15 20
robot.out
125.6725
0
252.5424
Exemplul 2
robot.in
3
10
5
25
2 4
robot.out
0