Lucrati
la o firma care produce microprocesoare. Pentru asamblarea microprocesoarelor,
firma utilizeaza un robot constituit dintr-un singur brat. Bratul este fixat
la unul dintre capete ("umarul") într-un punct plasat în
centrul platformei de lucru, iar la celalalt capat are un dispozitiv de lungime
neglijabila cu care poate "culege" componentele de pe platforma de
lucru ("mâna"). Bratul se poate misca numai în plan orizontal,
deasupra platformei de lucru.
Bratul este constituit dintr-o succesiune de N
segmente rigide de lungimi L1,
L2, ..., LN,
conectate prin puncte de articulatie. Mai exact, segmentul 1,
este conectat printr-un punct de articulatie în umarul robotului, segmentul
2 este conectat printr-un punct
de articulatie de segmentul 1,
..., segmentul N este conectat
printr-un punct de articulatie de segmentul N-1
si are la celalalt capat "mâna". Un punct de articulatie permite
rotatia libera (la orice unghi) a segmentului conectat în acel punct de
articulatie.
Pentru asamblarea unui microprocesor robotul trebuie sa culeaga succesiv componentele
acestuia de pe platforma de lucru. Fiecare componenta are o pozitie bine determinata
pe platforma de lucru, prin coordonatele sale relativ la un sistem de coordonate
cartezian, cu centrul în umarul robotului.
Rolul dvs. în firma este de a programa miscarile robotului. În acest
scop, pentru fiecare componenta pe care robotul o va culege trebuie sa specificati
"configuratia" bratului robotului care sa permita atingerea componentei
respective (mâna robotului sa fie plasata deasupra pozitiei în care
se afla componenta).
Configuratia bratului robotului este definita de unghiurile dintre segmentele
bratului rigid.
Cerinta
Scrieti un program care,
pentru o pozitie data, determina o configuratie pentru bratul robotului care
sa-i permita acestuia sa culeaga componenta din pozitia respectiva, daca este
posibil.
Date de
intrare
Fisierul de intrare robot2.in
contine pe prima linie un numar natural N,
care reprezinta numarul de segmente din care este format bratul robotului.
Pe fiecare dintre urmatoarele N
linii se afla câte un numar natural. Numarul aflat pe linia i+1
este lungimea celui de-al i-lea
segment al bratului robotului.
Pe ultima linie se afla doua numere întregi x
si y, separate prin câte
un spatiu, reprezentând coordonatele pozitiei la care trebuie sa ajunga
"mâna" robotului.
Date de
iesire
Fisierul de iesire robot2.out
contine o singura linie pe care se afla valoarea 0
daca nu este posibil ca mâna robotului sa ajunga în pozitia x,
y. Daca problema are solutie,
fisierul de iesire contine N
linii. Pe linia i se afla valoarea
reala ui care reprezinta
unghiul dintre segmentul i si
segmentul i-1 (pentru orice i
de la 2 la N),
iar valoarea u1 reprezinta
unghiul pe care segmentul 1 îl
formeaza în umarul robotului cu axa OX.
Restrictii
si precizari
1<N<=10000
0<Li<=200
0<=ui<360
-100000<=x,
y<=100000
Unghiurile se masoara
în sens trigonometric si sunt exprimate în grade.
Programul de evaluare
va verifica daca punctul în care este plasata mâna robotului pentru
configuratia data de dvs. (xp, yp)
coincide cu punctul de coordonate (x,
y). Eroarea admisa este de 0.001.
Mai exact, max{|x-xp|, |y-yp|}<0.001