infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: ditzone din Octombrie 23, 2005, 21:52:50



Titlul: 129 Cercuri
Scris de: ditzone din Octombrie 23, 2005, 21:52:50
Aici puteţi discuta despre problema Cercuri (http://infoarena.ro/problema/cercuri).


Titlul: 129 Cercuri
Scris de: Iorgulescu Calin din Octombrie 24, 2005, 20:32:58
Am si eu o mica intrebare... In legatura cu valorile de test de pe site.

Sursa mea, care a luat 100 de puncte... la testul 5 5 5 6 6 6 afiseaza ca raspuns... 11.900... iar pe site scrie ca valoare... 7.714.

Pare un pic dubios...nu?  :-k


Titlul: 129 Cercuri
Scris de: Mircea Pasoi din Octombrie 24, 2005, 23:02:27
Citat din mesajul lui: calinux
Am si eu o mica intrebare... In legatura cu valorile de test de pe site.

Sursa mea, care a luat 100 de puncte... la testul 5 5 5 6 6 6 afiseaza ca raspuns... 11.900... iar pe site scrie ca valoare... 7.714.

Pare un pic dubios...nu?  :-k


Intr-adevar dubios :shock:
S-a rezolvat bug-ul si s-a recorectat problema atat in Arhiva cat si la concurs.   :-'


Titlul: 129 Cercuri
Scris de: darlene din Octombrie 25, 2005, 15:49:40
:(...yo nu inteleg dc imi ia 0 pb ...rezolvarea o presupun corecta...e cineva kre ii da bn si dupa concurs?...


Titlul: 129 Cercuri
Scris de: Bogdan-Cristian Tataroiu din Octombrie 25, 2005, 16:33:59
Citeste http://astronomy.swin.edu.au/~pbourke/geometry/2circle/


Titlul: 129 Cercuri
Scris de: darlene din Octombrie 25, 2005, 18:49:30
mc..dar am citit aia...daia ma mir dc nu imi emrge:(


Titlul: Cercuri tangente
Scris de: Dan-Constantin Spatarel din Octombrie 26, 2005, 20:56:58
Dupa foarte multe submisii fara nici un rezultat, am modifcat sursa gresit (din punctul meu de vedere), ca sa constat cu stupoare ca evaluatorul imi considera programul corect.  :shock:

Asadar, iata modificarea, in conditia pentru cercuri tangente:

corect (dupa mine):
if ((R1+R2)*(R1+R2) == (X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2) || (R1-R2)*(R1-R2) == (X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2))

corect dupa evaluator:
if (abs(R1+R2 - sqrt((X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2))) <=0.0001 || abs(R1-R2 - sqrt((X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2))) <= 0.0001 )

Daca ar fi dupa mine, as re-re-corecta problema  \:D/ . In fine... voi ce parere aveti?  :-k


Titlul: Re: Cercuri tangente
Scris de: Mircea Pasoi din Octombrie 26, 2005, 21:33:49
Citat din mesajul lui: spatarel
Dupa foarte multe submisii fara nici un rezultat, am modifcat sursa gresit (din punctul meu de vedere), ca sa constat cu stupoare ca evaluatorul imi considera programul corect.  :shock:

Asadar, iata modificarea, in conditia pentru cercuri tangente:

corect (dupa mine):
if ((R1+R2)*(R1+R2) == (X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2) || (R1-R2)*(R1-R2) == (X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2))

corect dupa evaluator:
if (abs(R1+R2 - sqrt((X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2))) <=0.0001 || abs(R1-R2 - sqrt((X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2))) <= 0.0001 )

Daca ar fi dupa mine, as re-re-corecta problema  \:D/ . In fine... voi ce parere aveti?  :-k


Am pus linia corecta zisa de tine in locul la cea cu abs() in sursa ta si tot ia 100.. eu zic sa te uiti mai atent, fiindca greseai altceva inainte.  :P Deci, nu e cazul sa se recorecteze nimic  [-X


Titlul: :((
Scris de: Dan-Constantin Spatarel din Octombrie 26, 2005, 21:47:45
Corect! Imi cer scuze! Am mai modificat ceva, dar parea inofensiv... De unde rezulta ca acolo s-a strecurat bug-ul :(.

Sper sa nu te superi, dar o sa spun si ce am gresit, ca sa nu mai greseasca si altii  :P  - am pus conditia de cercuri fara puncte comune inaintea celei de cercuri tangente.

My Bad!  ](*,)


Titlul: 129 Cercuri
Scris de: darlene din Octombrie 27, 2005, 16:09:04
spatarel:
1.corect (dupa mine):
if ((R1+R2)*(R1+R2) == (X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2) || (R1-R2)*(R1-R2) == (X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2))

2.corect dupa evaluator:
if (abs(R1+R2 - sqrt((X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2))) <=0.0001 || abs(R1-R2 - sqrt((X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2))) <= 0.0001 )


cele 2 chestii sunt echivalente...doar k  la 2.  avand in vedere k lucrezi cu var de tipul real-pascal sau double-C compararea a 2  variabile d tipul ala se face mai greu si de aceea mai usor se compara diferenta lor cu 0.0001 in cazul de fata...


Titlul: 129 Cercuri
Scris de: cristi8 din Octombrie 27, 2005, 17:12:47
nu ca se face mai greu, dar apar erori de precizie. de exemplu:

Cod:
  double a, b;
  a = 1/sqrt(2);
  b = sqrt(2)/2.0;
  printf("%lf  %lf   %d\n", a, b, (a==b));

afiseaza 2 valori egale, si 0. adica la o anumita zecimala (care nu e afisata) cele 2 numere difera. si nu sunt == (EGALE)


Titlul: 129 Cercuri
Scris de: Mihai Leonte din Noiembrie 06, 2005, 10:10:32
Hmm... evaluatorul la problema asta pare sa aiba ceva ciudat. Probabil ca problema mea nu e corecta dpdv al preciziei de 3 zecimale. Dar mie imi dau rezultatele din test (7.zz4) si formulele matematice par foarte OK. Insa mi se pare cel putin bizar ca imi evalueaza un singur test.
De ce doar unul? Am trimis problema de mai multe ori, gandindu-ma la vreo posibila eroare a evaluatorului, dar acelasi rezultat.


Titlul: 129 Cercuri
Scris de: Filip Cristian Buruiana din Noiembrie 06, 2005, 13:39:19
:-' Problema a fost data la Happy Coding II, si acolo una din reguli era ca problemele sunt evaluate folosind un singur test. Asa ca evaluatorul nu are nimic  :mrgreen: din fericire...


Titlul: 129 Cercuri
Scris de: Tabara Mihai din Noiembrie 06, 2005, 20:48:03
si mie imi iese perfect fisierul de intrare dar nu stiu ce am gresit de iau 0 puncte.....ma mai gandesc


Titlul: 129 Cercuri
Scris de: Tabara Mihai din Noiembrie 08, 2005, 17:49:00
incepe sa ma dispere problema asta....nu-mi iese si gata.......cred ca am sa fac ce face avatarul asta ](*,)  ](*,)  ](*,)  ](*,)  ](*,)  ](*,)  ](*,)

acuma serios..nu-mi dau seama ce gresesc......partea matematica am facut-o perfect..(nu cred ca am gresit formulele)...iar conditiile le-am pus cum trebuie....si imi si iese testul din exemplu.....nu inteleg.

Intrebare:Nu mai puneti va rog un mic test din care poate as putea sesiza greseala in prg-lu meu???pls...


Titlul: 129 Cercuri
Scris de: Bogdan-Cristian Tataroiu din Noiembrie 08, 2005, 18:05:54
Verifica partea matematica cu linkul care l-am pus mai sus si daca tot nu-ti iese rescrie sursa ca te ajuta uneori  :peace:


Titlul: 129 Cercuri
Scris de: u-92 din Noiembrie 08, 2005, 18:22:48
probabil gresesti la precizie, daca folosesti de mai multe ori sqrt().. cel putin asta greseam eu, cand am redus la o singura apelare a functiei sqrt() mi-a mers


Titlul: 129 Cercuri
Scris de: Tabara Mihai din Noiembrie 09, 2005, 19:18:29
linkul ii ok....am luat din el partea matematica...ba chiar mai mult....am gasit  inca un site:

mathworld.wolfram.com/Circle-CircleIntersection.html

si tot nu imi merge.....acuma incerc sa reusesc o singura apelare sqrt poate poate o sa-mi mearga....


Titlul: 129 Cercuri
Scris de: Tabara Mihai din Noiembrie 09, 2005, 19:40:47
nu pot sa scap de functia sqrt.... ](*,)  ](*,)  ](*,)  ](*,)  ](*,)  ](*,)  ](*,)  


la naiba cu el sqrt()......am incercat in toate modurile....

d = sqrt((x1 - x2) * (x1 - x2) + (o1 - o2) * (o1 - o2)); aici sunt obligat sa-l las....dar dincolo la conditie nu reusesc sa scap de el.... #-o


Titlul: 129 Cercuri
Scris de: nivan din Noiembrie 09, 2005, 19:48:48
Nu cred ca se referea sa scoti SQRT de peste tot...... ci sa nu folosesti la acelasi numar astfel incat sa se faca o aproximare gresit de la primul SQRT la al doilea.  (Da nu te lua dupa mine ca eu inca nu am facut problema......  )


Titlul: 129 Cercuri
Scris de: Sara Nicolae Bogdan din Noiembrie 09, 2005, 20:05:47
Cod:

7.713 (7,7136)
7.713 (7,7136)
18.708
-1
-2


Mie atata imi da pe exemplu ...

Din enunt nu reiese ca ar trebui aproximat ; voua cat va da cu 4 zecimale la primele 2 perechi de cercuri ? :flex:


Titlul: 129 Cercuri
Scris de: Tabara Mihai din Noiembrie 09, 2005, 20:11:39
7.7136
7.7136
18.7083
-1
-2

imi afiseaza si mie tot atata...dar daca in exemplu arata 3 zecimale probabila ca atata trebuie...daca erau zerouri poate ca trebuie sa afisam cu 4 dar 7.713 are a 4-a zecimala 6...deci trebuie afisat cu 3 zecimale....eu asa am inteles


Titlul: 129 Cercuri
Scris de: Sara Nicolae Bogdan din Noiembrie 09, 2005, 20:33:44
Cod:

imi afiseaza si mie tot atata...dar daca in exemplu arata 3 zecimale probabila ca atata trebuie...daca erau zerouri poate ca trebuie sa afisam cu 4 dar 7.713 are a 4-a zecimala 6...deci trebuie afisat cu 3 zecimale....io asa am inteles,,,,


Tu ai citit ce-am scris ? :eyebrow:


Titlul: 129 Cercuri
Scris de: Tabara Mihai din Noiembrie 09, 2005, 20:38:24
poate ca am o exprimare putin mai greoaie..dar ma cam grabeam cand am scris.....my point is ca si mie imi afiseaza cu 4 zecimale exact ca si tie...punct!


Titlul: Răspuns: 129 Cercuri
Scris de: George Popoiu din Februarie 04, 2011, 19:50:27
Imi explicati si mie va rog de unde vine P2 = P0 + a(P1-P0)/d ?

Formula e in linkul asta http://astronomy.swin.edu.au/~pbourke/geometry/2circle/ (http://astronomy.swin.edu.au/~pbourke/geometry/2circle/)


Titlul: Răspuns: 129 Cercuri
Scris de: UAIC.VlasCatalin din Iunie 27, 2011, 16:45:00
spuneti-mi cum procedam in cazul cind un cerc se include in altul si nu are nici un punct de intersectie cu cercul mare?


Titlul: Răspuns: 129 Cercuri
Scris de: Paul-Dan Baltescu din Iunie 27, 2011, 17:10:36
Daca intrebarea ta este de fapt cum recunosti un astfel de caz, raspunsul este urmatorul: un astfel de caz poate fi recunoscut in functie de distanta dintre centrele cercurilor si diferenta razelor celor doua cercuri.

Daca nu asta e raspunsul pe care il cautai, te rog reformuleaza intrebarea. :)


Titlul: Răspuns: 129 Cercuri
Scris de: UAIC.VlasCatalin din Iunie 27, 2011, 18:23:41
deja nu mai conteaza ce am avut in vedere, pentru ca am luat 100 puncte, dar totusi ms de receptie :ok:


Titlul: Răspuns: 129 Cercuri
Scris de: Cobzaru Adrian-Andrei din Martie 21, 2012, 18:04:59
Ma puteti ajuta si pe mine?Sursa mea ia 0 puncte, dar imi afiseaza corect exemplul.Am folosit link-ul de mai sus pentru formule.

Cod:
d=sqrt(((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))*1.0);
if(r1==r2 && d==0)
fprintf(f,"%d\n",-1);
else
if(d>r1+r2 || d<fabs((r1-r2)*1.0))
fprintf(f,"%d\n",-2);
else
if(d==r1+r2)
fprintf(f,"%d\n",-3);
else
{
asa=2*sqrt((r1*r1-(r1*r1-r2*r2+d*d)/(2*d)*(r1*r1-r2*r2+d*d)/(2*d))*1.0);
fprintf(f,"%-.3f\n",asa);
}
P.S.:Variabilele d, respectiv asa sunt pe double, restul pe long long.

Editat de admin: Foloseste tagul "code" cand postezi surse.


Titlul: Răspuns: 129 Cercuri
Scris de: Dan H Alexandru din Iulie 26, 2012, 11:43:17
Exemplul iti da bine pentru ca nu apare nici un "-3" in exemplu. Conditia corecta pentru al 3-lea caz este:

Cod:
if( ((Raza+Raza2)*(Raza+Raza2) == (X-X2)*(X-X2) + (Y-Y2)*(Y-Y2) || (Raza-Raza2)*(Raza-Raza2) == (X-X2)*(X-X2) + (Y-Y2)*(Y-Y2)) )

Succes.  :ok:


Titlul: Răspuns: 129 Cercuri
Scris de: Pirtoaca George Sebastian din August 26, 2013, 09:31:44
Cat trebuie sa dea pentru :
Cod:
100
653 319 189 167 506 235
415 287 200 472 497 387
81 431 795 172 383 107
26 612 464 455 33 866
587 130 59 308 315 211
683 526 597 830 119 148
745 385 582 309 538 675
709 319 830 468 737 889
115 527 578 608 61 775
475 252 644 979 23 342
870 15 662 538 217 171
798 760 41 62 612 997
529 787 983 523 417 890
53 571 202 258 683 788
586 28 721 420 489 872
18 8 1000 500 839 496
422 703 542 411 283 269
755 50 903 464 379 611
365 283 976 512 986 644
118 348 520 820 812 769
953 642 969 918 419 930
145 490 925 243 318 753
808 970 503 730 964 828
791 947 198 572 292 363
102 239 576 41 860 689
990 956 284 832 99 295
4 377 103 899 318 195
82 117 706 887 401 930
188 644 611 450 866 172
114 997 593 108 68 154
771 532 813 362 688 690
650 503 161 181 605 351
773 75 393 781 185 552
361 66 464 633 973 442
923 610 423 657 793 889
84 314 749 6 561 603
300 898 618 407 328 942
44 398 989 233 974 287
911 83 501 98 987 604
209 908 79 343 238 268
45 507 363 332 66 320
410 458 327 350 7 644
328 1 499 172 578 389
935 145 986 164 588 900
137 59 836 466 108 109
69 482 897 273 720 27
531 371 555 713 301 726
656 744 597 653 463 671
168 399 626 501 567 817
999 579 411 407 809 781
472 91 252 331 345 777
233 612 587 742 538 182
246 966 572 508 824 788
67 449 398 488 813 781
564 791 542 454 219 759
514 536 632 511 732 87
468 318 528 801 182 302
898 468 545 707 226 832
967 207 545 733 702 347
816 226 318 649 664 820
628 289 824 299 172 453
46 325 130 757 684 85
891 143 657 56 2 763
167 978 900 774 647 140
460 483 535 724 806 277
696 292 25 702 522 882
281 685 680 558 574 93
653 641 329 334 264 782
532 25 130 885 449 963
107 304 312 118 404 826
569 960 226 604 135 631
359 729 409 918 812 237
818 571 132 963 256 961
27 154 995 614 281 133
330 529 246 517 846 44
234 41 121 267 120 327
892 234 7 75 111 233
971 755 66 308 787 570
426 193 80 482 123 961
97 223 579 104 62 905
688 255 947 535 567 896
160 574 878 706 320 241
642 301 764 187 536 269
269 99 927 271 673 606
289 376 799 923 32 705
531 25 384 775 627 48
750 144 201 448 659 205
504 416 146 992 785 800
929 485 708 738 305 160
168 822 759 679 329 326
327 517 652 24 497 365
802 571 144 268 128 932
754 853 702 119 1 431
913 930 503 953 487 756
207 349 155 907 856 598
520 589 804 736 884 248
220 20 365 215 274 911
572 195 560 828 517 716
869 862 871 371 473 318
114 514 456 90 170 794
Multumesc!


Titlul: Răspuns: 129 Cercuri
Scris de: Constantinescu Adrian din Martie 01, 2014, 23:13:15
linkul ii ok....am luat din el partea matematica...ba chiar mai mult....am gasit  inca un site:

mathworld.wolfram.com/Circle-CircleIntersection.html

si tot nu imi merge.....acuma incerc sa reusesc o singura apelare sqrt poate poate o sa-mi mearga....
multumesc frumos pentru link... am reusit sa rezolv problema cand aveam intersectia in 2 puncte. trebuie doar sa calculezi ipotenuza si sa o inlocuiesti in formula. URAAA!!!


Titlul: Răspuns: 129 Cercuri
Scris de: Potra Vlad din Mai 27, 2014, 17:27:57
Cineva care a luat 100 poate sa imi zica ce .out e pentru testul :
Cod:
17
452 439 751 415 500 33
967 537 344 609 201 284
91 745 366 395 732 960
417 27 302 942 33 220
877 98 852 813 123 812
208 232 92  620 129 130
419 43 649 363 178 587
720 811 865 529 868 190
859 38 177 766 279 137
611 36 454 442 498 327
187 179 352 753 301 201
329 367 202 449 144 471
363 826 764 274 657 174
865 487 280 809 137 649
862 405 348 811 518 956
111 400 194 139 827 956
0 0 1000 1000 1000 1000


Titlul: Răspuns: 129 Cercuri
Scris de: Tudor Varan din Mai 27, 2014, 20:46:41
Cod:
 -2
388.631
-2
-2
1351.801
-2
1111.424
-2
176.357
586.031
-2
-2
-2
-2
-2
-2
1414.214


Titlul: Răspuns: 129 Cercuri
Scris de: Breahna David din Iunie 16, 2014, 09:31:23
Ma ajută și pe mine cineva ???
Puteți să-mi spuneți de ce primesc eroare de compilare ??/ ](*,) ](*,) ](*,) ](*,) ](*,) :fighting: :angry:

http://www.infoarena.ro/job_detail/1198559

am, găsit o eroare, făceam o împărțire la 0,, da tot
îmi dă eroare de compilare.. !!!
Și nu înțeleg pe PC, se compilează bine și rezultatele sunt bune..
iată noua sursă.
http://www.infoarena.ro/job_detail/1198602 ,,
are cineva idei ?? ](*,) ](*,) :angry: :angry:

P.S: s-a rezolvat.. !!!  :yahoo: :yahoo:
nu știam că math.h are predeclarată ca variabilă globală y1,
deci trebuia s-o înlocuiesc.  =D&gt; :ok: