robot

Time limit: 0.05s Memory limit: 16MB Input: robot.in Output: robot.out

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 NN segmente rigide de lungimi L1,L2,,LNL_1, L_2, \dots, L_N, conectate prin puncte de articulaţie. Mai exact, segmentul 11, este conectat printr-un punct de articulaţie în umărul robotului, segmentul 22 este conectat printr-un punct de articulaţie de segmentul 11, \dots, segmentul NN este conectat printr-un punct de articulaţie de segmentul N1N-1 ş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 NN, care reprezintă numărul de segmente din care este format braţul robotului.
Pe fiecare dintre următoarele NN linii se află câte un număr natural. Numărul aflat pe linia i+1i+1 este lungimea celui de-al ii-lea segment al braţului robotului.
Pe ultima linie se află două numere întregi xx şi yy, 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 00 dacă nu este posibil ca mâna robotului să ajungă în poziţia x,yx, y. Dacă problema are soluţie, fişierul de ieşire conţine NN linii. Pe linia ii se află valoarea reală uiu_i care reprezintă unghiul dintre segmentul ii şi segmentul i1i-1 (pentru orice ii de la 2 la N), iar valoarea u1u_1 reprezintă unghiul pe care segmentul 11 îl formează în umărul robotului cu axa OX.

Restricții și precizări

  • 2N10 0002 \leq N \leq 10 \ 000
  • 1Li2001 \leq L_i \leq 200
  • 0ui<3600 \leq u_i < 360
  • 100 000x,y100 000-100 \ 000 \leq x, y \leq 100 \ 000
  • 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. (xp,yp)(x_p, y_p) coincide cu punctul de coordonate (x,y)(x, y) 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

Log in or sign up to be able to send submissions!