Afişează mesaje
|
Pagini: [1] 2
|
1
|
Comunitate - feedback, proiecte si distractie / Blog / Răspuns: Subset maxim
|
: Decembrie 13, 2011, 10:03:04
|
Folosim solutia lui Bogdan numai ca in loc de multimi disjucte folosim o padure de arbori direct. Nodurile sunt numerotate folosind indicii vectorului. Practic cand ajungem la un numar cautam in Hash indicele numarului v[ i ]-1 si v[ i ]+1 si daca le gasim(pe oricare dintre ele, nu neaparat pe amandoua) trasam o muchie de la i la indicele/indicii valorilor gasite. La final putem face un DFS in care determinam numarul de elemente din fiecare arbore(lant) si minimul sau maximul ceea ce este suficient pentru a afisa numerele. DFS-ul este O(N) fiindca avem maxim N-1 muchii.
|
|
|
4
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: unghi maxim
|
: August 02, 2011, 18:21:30
|
Totusi metoda asta cu cross product mi se pare mai dificila. E mult mai usor cu pantele sau teorema cosinusului.
Da dar cross product e destul de folosit in probleme. Adica cu el poti afla ariile poligoanelor, poti sa afli daca 2 segmente se intersecteaza, poti sa afli infasuratoarea convexa si multe altele(vezi topcoder). Sa fiu sincer, e prima data cand folosesc teorema cosinusului la o problema de informatica. Este buna si solutia cu tangenta unghiului format de cele 2 drepte! Poti aplica ce a zis Silviu si in cazul cand unghiul este ACB. Dar nu cred ca este nevoie sa calculezi arctangenta. Adica pe (0,pi/2) e pozitiva si crescatoare iar pe (pi/2,pi) e negativa si crescatoare si la imagini egale ai argumente egale(in afara de 0 si pi) deci nu e nici o problema sa-ti dai seama daca unghiul x are masura mai mare ca unghiul y daca le stii tangentele.
|
|
|
5
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: unghi maxim
|
: August 02, 2011, 00:30:42
|
Cel mai simplu merge cu teorema cosinusului. Cum stii coordonatele afli lungimile laturilor cu Th Pitagora si cosinusul unghiului cu Th cosinusului. In cazul in care vrei sa afli cel mai mare unghi sub 180o acesta va avea cosinusul minim, iar daca vrei pentru unghiurile mai mare de 180o acesta are cosinusul maxim.(pe [0,pi] cosinusul este strict descrescator).
O metoda mai grea ar fi cu cross product prin care putem afla sinusul. Dar nu este de ajuns deoarece sinusul nu este monoton pe [0, PI]. Deci trebuie sa aflam si daca unghiul trece in cadranul 2 sau nu. Fie d' perpendicular pe dreapta AC in punctul B', B apartine d', daca B' apartine (AC) atunci masura unghiului este mai mica de pi/2, iar daca nu apartine este mai mare. Pentru a afla daca B' apartine (AC) trebuie sa-i aflam coordonatele. Scriem ecuatia dreptei AC si aflam panta. Cum d' perp. pe AC produsul pantelor este -1 => panta lui d' este (-1/(panta lui AC)). Acum stim ca (y-yB)=panta(d')*(x-xB) si o putem rescrie sub forma ax+by+c=0. Putem afla astfel coordonatele lui B' din cele 2 ecuatii pe care le verifica(ecuatia dreptei d' si a dreptei AC). Pentru a afla daca B' apartine (AC) verificam daca coordonatele lui B sunt in interiorul celui mai mic dreptunghi determinat de A si C cu laturile paralele cu axele de coordonate. Daca apartine acestui dreptunghi atunci apartine si segmentului (AC).(segmentul AC este intersectia punctelor din interiorul dreptunghiului cu axa AC pe care B' se afla din ipoteza).
Sper ca am scris bine. Daca gasiti greseli va rog sa ma corectati.
|
|
|
7
|
Comunitate - feedback, proiecte si distractie / Blog / Răspuns: Concursurile, algoritmii si lumea reala
|
: Iulie 15, 2011, 22:03:39
|
Nu. Vorbeam in general. Ma gandesc ca un arbore binar de cautare e mult mai folosit decat programarea dinamica nu? Poate si arborii de intervale sau heapurile.
Vreau doar sa stiu daca se foloseste multa programarea dinamica in practica pentru nu vad cum anumite probleme de programare dinamica pot fi folosite pentru a ajuta pe cineva. Problema rucsacului cred ca apare si in practica. Dar o problema de genul "cate siruri de N numere dintre care K au o anumita proprietate" nu stiu daca apare.
|
|
|
12
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Bacalaureat 2011
|
: Iulie 01, 2011, 17:08:11
|
La partea I, 2 b) minimu era 31 si maximul 35? ca in barem "b. Pentru răspuns corect 6p. Se acordă câte 3p. pentru fiecare valoare corectă." E bun 31 si 35. Apropo de barem. Voua nu vi se pare ca este o mica greseala la ultimul algoritm din barem? Nu trebuia pusa o conditie ca S1-c1<10 si s2-c2<10? Adica daca S1=13, c1 nu are cum sa fie 1 pentru ca S1-c1=12 care nu e cifra. Si afisarea cum ati facut-o? Eu am afisat direct cifrele pentru ca nu scria nicaieri ca trebuie salvat sau calculat efectiv numarul. Ci doar sa se gaseasca in fisierul text.
|
|
|
18
|
Comunitate - feedback, proiecte si distractie / Blog / Răspuns: Problema - Poza
|
: Iunie 21, 2011, 07:46:26
|
Ok. Dar eu ma gandisem la un algoritm euristic care ca sa fixeze valoarea *********** si afla coordonatele unui punctul si verifica apoi daca chiar este punct comun... cu o anumita eroare, si practic timpul de executie depinde de cat de exact vreau sa fie rezultatul meu.
|
|
|
19
|
Comunitate - feedback, proiecte si distractie / Blog / Răspuns: Problema - Poza
|
: Iunie 20, 2011, 22:22:16
|
Punctul din output se da prin coordonatele sale? Cat de mare trebuie sa fie acuratetea solutiei(cate zecimale exacte)? Se dau coordonatele vreunui varf al dreptunghiului mic? Daca da, care din ele? Punctul (0,0) este situat in coltul stanga jos al dreptunghiului mare?
|
|
|
21
|
Comunitate - feedback, proiecte si distractie / Blog / Răspuns: SQL query - rezolvare
|
: Iunie 10, 2011, 21:30:26
|
La problema cu minimul si maximul nu ar merge si o solutie recursiva gen: Comparam elementele vecine 2 cate 2 => N/2 comparatii, N/2 maxime, N/2 minime Comparam maximele, si minimele din fiecare perechi 2 cate 2=> N/4+N/4=N/2 comparatii si raman N/4 maxime si N/4 minime Comparam din nou maximele si minimele din fiecare cvadrupluri=> N/8 comparatii la maxime + N/8 la minime=N/4 camparatii si raman N/8 maxime si N/8 minime Comparam grupurile de maximele si minimele din grupurile de cate 8=>N/16 +N/16 = N/8 comparatii si raman N/16 maxime si N/16 minime si tot asa. Ar veni N/2+N/2+(N/4+N/8+N/16+...+1)=3N/2
pair functie(int st,int dr) { pair ret; if(st==dr) { ret.min=a[st]; ret.max=a[st]; } else {m=(st+dr)/2; pair pst=functie(st,m); pair pdr=functie(m+1,dr); ret.min=min(pst.min,pdr.min); ret.max=max(pst.max,pdr.max);} return ret; }
|
|
|
|