Afişează mesaje
|
Pagini: [1]
|
7
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / 062 Poligon
|
: Martie 21, 2005, 23:30:58
|
Am folosit faptul ca un punct este interior unui poligon numai daca dreapta paralela cu Ox care il contine intersecteaza intr-un numar impar de ori laturile poligonului la dreapta punctului. Am luat numai 60 de puncte pentru ca am depasit timpul de executie. Exista o alta metoda de rezolvare, mult mai eficienta? Sau trebuie sa-mi imbunatatesc algoritmul?
Si o intrebare pentru organizatori: dupa cat timp este oprit un executabil dupa ce a depasit timpul de executie? Daca in "Monitorul de evaluare" am la un test timp de executie "0.31s" pentru o problema care admite numai 0.2 sec, inseamna ca programul meu s-a oprit dupa 0.31 sec sau ca evaluatorul la oprit fortat?
|
|
|
8
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / 056 Rubarba
|
: Martie 21, 2005, 23:30:18
|
In articolul cu solutiile pentru runda #2 cls XI-XII era mentionata o tehnica de programare numita "Rotating Calipers" ( http://cgm.cs.mcgill.ca/~orm/rotcal.html ). Articolul este deosebit de interesant dar nu am avut nici o idee buna ca sa pot sa-l implementez. A incercat cineva sa foloseasca aceasta tehnica pentru problema "Rubarba" sau pentru alte probleme care accepta o astfel de rezolvare? Am mare nevoie de ajutor. ( de fapt, nu stiu cum sa compar 2 unghiuri determinate fiecare de cate 2 drepte).
|
|
|
9
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / 054 Indep
|
: Martie 21, 2005, 23:29:44
|
Intrebare pentru autorii solutiei sau pentru oricine a citit articolul cu solutiile la runda #2 : Cum generez "toate numerele x < 1000, produs de numere prime distincte" ? Daca nu ma insel, asta inseamna toate submultimile multimii P = { x | x<100 si x prim } care au produsul elementelor mai mic decat o mie. Dar card(P) = 170 si ar veni cam 2^170 de combinatii! Cum separ din toate submultimile lui P numai pe cele cu produsul mai mic decat 1000. Backtracking? Sau exista ceva mai eficient?
|
|
|
10
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / 038 Tribute
|
: Martie 20, 2005, 23:15:57
|
Am implementat un algoritm dar nu am reusit sa iau decat 10 puncte. In principiu, am cautat sa aflu unde ar trebui sa fie asezat terenul pe orizontala si pe verticala. Prima data am sortat abscisele punctelor. Am luat o dreapta in punctul cu abscisa cea mai mica si unul in capatul celalat si m-am apropiat cu dreptele una de cealalta pana distanta dintre ele este DX. La fel am procedat si pentru verticala. Dupa care, avand coordonatele terenului, calculez distanta pana la fiecare punct din exteriorul sau.
Unde am gresit?
Voi cum ati rezolvat problema?
Va multumesc!!!
|
|
|
11
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / 008 Cifra
|
: Martie 20, 2005, 20:38:19
|
Am rezolvat problema asta in 2 moduri.
I. Am folosit, ma rog, relatii matematice acolo.... si am facut un algoritm cat de cat eficient pentru care am luat 90 de puncte.
II. Am observat ca pot sa preprocesez solutiile si sa le pun intr-o matrice de 10x10. Programul meu arata cam in felul urmator:
deschide fisiere
pentru i = 1 la T citeste o valoare afiseaza a[penultimacifra][ultimacifra]. sfarsit pentru
inchide fisierele
Cu toate ca al doilea program avea 10 randuri si face de cel putin vreo 10 ori mai putine operatii, am obtinut 80 de puncte. ( timpul de executie a fost depasit pentru ultimele teste).
Am tot auzit de "linia de cache" peste tot pe forum si vreau sa stiu daca asta este problema si in cazul meu. Si chiar daca nu este, vreau ceva informatii despre linia de cache si cum putem evita problemele legate de ea.
Va multumesc!!!
|
|
|
12
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 011 Copaci
|
: Martie 19, 2005, 23:47:00
|
Am cautat dar nu am auzit sa fi cercetat Pitagora sau altcineva cati copaci intra intr-un triunghi oarecare. Am descoperit totusi ceva intre cmmdc si triunghiul dreptunghic ( atatea indicii am primit). Si anume: numarul punctelor de coordonate intregi din interiorul unui triunghi cu varfurile de asemenea de coordonate intregi este: [ (a-i)(b-1) - cmmdc(a, b) + 1]/2. Mi se pare chiar foarte corecta formula si nu cred ca e greu de gasit. Adica intru-un dreptunghi sunt (a - 1)(b - 1) puncte de coordonate intregi iar intr-un triunghi dreptunghic sunt cam jumatate ( pentru ca scadem numarul de puncte de pe diagonala dreptunghiului care au coordonate intregi). Nu? Se poate generaliza si la un triunghi oarecare daca este nevoie ( il incadrez intr-un dreptungi si scad punctele din cele 3 triunghiuri dreptunghice care apar). Asa... si daca asta este formula pe care mi-ai cerut-o, atunci ce fac mai departe?
|
|
|
13
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / 055 Cerere
|
: Martie 19, 2005, 22:30:44
|
Mi-e nu imi plac grafurile de nici o culoare si nu prea am lucrat astfel de probleme pana acum. Cum fac sa memorez grafuri de dimensiuni foarte mari? (ex. 100 000 de noduri, ca in problema "cerere").
Si nu am inteles solutia comisiei. Dupa cate am inteles eu din grafuri, parcurgerea in adancime pentru exemplul din problema este : 1 2 3 4 5 6 7 9 10 8. Stramosul lui 6 este p[6-1] = p[5] = 5 ( FALS).
|
|
|
16
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 011 Copaci
|
: Martie 18, 2005, 09:16:01
|
Cine imi spune mie cum merge exact algoritmul care verifica daca un punct apartine interiorului unui poligon oarecare? Daca numar toate punctele de intersectie de la dreapta punctului cu laturile poligonului imi da, dar ce se intampla daca dreapta intersecteaza un varf al poligonului? Si sa imi spuneti si mie daca acest algoritm s-ar putea adapta pentru aceasta problema. (Din punct de vedere al timpului de executie, pentru ca banuiesc ca altfel nu ar fi probleme). Multumesc mult!!!
|
|
|
20
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Alocare dinamica in C++
|
: Martie 13, 2005, 22:39:13
|
Problema mea este la ONI.
Eu am DJGPP. L-am si folosit pentru cele 2 probleme pe care le-am mentionat. Nici nu am mai
alocat dinamic pentru ca in GNU am putut declara un tablou de 200X500. Dar la ONI eu voi
lucra in Windows si nu cred ca au ei DJGPP instalat pe calculatoarele unde o sa stau eu. Si
chiar daca evaluarea se face in GNU, imi vine cam greu sa dau o sursa care pe BC++ 3.1 nu
se compileaza, sperand ca va merge in GNU. Si, cum fac sa initializez un tablou cu 0 in GNU? Daca folosesc "memset" imi da eroare.
Mai stiu de la ONI de anii trecuti ca "stdlib.h" nu merge sub linux. Dar am compilat o
sursa in GNU si mi-a cerut sa includ stdlib ca sa pot folosi functia abs. Unde pot gasi o
lista cu ce header-e sa folosesc in gnu?
|
|
|
22
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / 005 Permutari
|
: Martie 12, 2005, 21:23:51
|
Am sa raspund la toate mesajele: 1. am implementat operatii pe numere mari de pana la 500 de cifre
(iar din calculele mele cel mai mare numar se obtine pentru 200 si 2 sau 200 si 3 si nu are decat 370 si ceva de cifre, un pic mai mult decat 200!). 2. folosesc primul numar al lui stirling, primesc "Wrong answer"
iar tmpul de executie este sub 0.05 sec (pt N=200). 3. pt Bogdan2412: ce ai gasit tu este nr lui Stirling de speta a
doua, care este cu totul altceva. Si am inteles bine problema. Pt n = 5, obtin 24, 50, 35 (ca in exemplul din problema), 10 si 1. Nu-i asa?
Acesta e textul problemei din "Probleme de combinatorica si teoria grafurilor": 12.15 Demonstrati ca numarul permutarilor p ale multimii {1,2,...,n} care au proprietatea ca exista exact k elemente j pentru care p(j)>p(i) pentru orice i<j este egal cu |s(n,k)|.
|s(n,k)| numarul lui Stirling de speta intai si este egal cu coeficientul lui x^k din dezvoltarea: x(x+1)(x+2)...(x+n-1).
Daca doreste cineva am sa pun pe forum si demonstratia lui Ioan Tomescu.
|
|
|
23
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / 005 Permutari
|
: Martie 12, 2005, 13:05:36
|
Am demonstrat ca rezultatul este de fapt numarul lui Stirling
de speta intai |s(N,K)|, unde N si K sunt numerele din problema.
Am determinat s(N,K) cu formula de recurenta: s(N,K) = (N-1)s(N-1,K) + s(N-1, K-1). Desi atat formula cat si calcularea ei recursiva mi se par
corecte ( sunt demonstrate in "Probleme de combinatorica si teoria
grafurilor" de Ioan Tomescu, Editura Didactica si Pedagogica,
1981, pag. 51) sursa mea este evaluata la 10 puncte. De ce?
|
|
|
24
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Alocare dinamica in C++
|
: Martie 11, 2005, 22:40:35
|
Am nevoie de niste informatii referitoare la alocarea dinamica in C++. Lucrez in Borland C++ 3.1 si am rezolvat 2 probleme propuse pe Infoarena. Solutiile sunt pe baza de formule de calcul usor de implementat si care ofera rezultatul aproape instantaneu. Problema este ca am nevoie de tablouri de dimensiuni mari. Ex. int a[200][400];
O astfel de declarare produce eroare la compilare : "Array size to large".
Am incercat sa aloc dinamic in felul urmator: =================================== int *a[200];
for(i=0; i<200; i++) a = new int[400]; ===================================
Operatia decurge cu succes dar pentru numere mari apar diferite neajunsuri: Exemple: 1. valorile unor variabile se modifica nejustificat; 2. obtin erori de tipul : "Null pointer assignment"; 3. se inchide Borland C++ brusc;
Am incercat sa folosesc si "malloc": ======================================================== int *p;
if( (p = (int*) malloc(NMax)) == NULL ) printf("Not enough memory to allocate buffer\n"); ========================================================
Aceleasi rezultate le-am obtinut si cu aceasta implementare iar la alocarea tablourilor mesajul "Not enough memory to allocate buffer" aparea pe ecran de mai multe ori.
Cum sa procedez ca sa pot aloca tablouri mari in memorie???
(Am marit si heap-ul dar nu am observat nici o imbunatatire).
|
|
|
|