Afişează mesaje
|
Pagini: 1 ... 5 6 [7] 8 9 ... 12
|
156
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: help ...
|
: Aprilie 01, 2009, 20:14:46
|
Nu cred ca ai cum sa definesti operatorul ++ cum vrei tu. Nu poti sa supraincarci operatorul ++ pentru ca tu faci operatia pe un pointer, iar din cate stiu pointerii nu sunt tipuri de date. Daca faci cum a spus Andrei dezavantajul este ca nu vei mai putea folosi operatorul ++ decat cu pointeri, si nu il vei mai putea folosi pentru intregi, spre exemplu. #define ++it it = it -> x int a = 0; ++a; // da eroare, se transforma in a = a -> x si a nu e pointer
Pentru a permite o astfel de scrieri, in structurile de date din STL se folosesc iteratorii, dar acestia sunt niste clase mai speciale definite in interiorul clasei parinte.
|
|
|
157
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 486 Reactivi
|
: Martie 24, 2009, 21:17:57
|
salut, imi puteti explik shi mie pls k pt un prost dc sortarea asta: void ordonare() { for (int i=100; i>=-100; i--) for (int j=1; j<=n; j++) if (mi[j]==i) { int aux1=mi[j], aux2=ma[j]; for (int k=j-1; k>=1; k--) { mi[k+1]=mi[k]; ma[k+1]=ma[k]; } mi[1]=aux1; ma[1]=aux2; } }
este mai ineficienta k bubble? .. ms Sortarea este corecta, si are complexitatea O(n 2), deci in cazul problemei de fata difera fata de bubble-sort doar printr-o constanta. O rezolvare a problemei folosind acest algoritm nu va intra in timp, cum nu intra nici folosind algoritmul bubble-sort. Trebuie folosita o sortare in O(n*log(n)) sau O(n).
|
|
|
158
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva educationala / Răspuns: 032 Flux maxim
|
: Martie 07, 2009, 13:10:15
|
am facut algoritmul lui ford fulkerson si iau incorect pe ultimele 4 teste. ( http://infoarena.ro/job_detail/269420 ). din cate am citit in indicatiile de rezolvare, se zica ca algoritmul scoate 100 daca i se face o modificare (pe care sincer n-am inteles-o), dar din cate imi dau seama optimizeaza timpul. probleme cu timpul cred ca n-am, deci de unde ar putea fi problema? Am trimis sursa ta modificand memseturile din BF si am luat 70 cu TLE pe ultimele 3 teste. Vezi ca am pus un post in topicul de la Ciurul lui Eratostene despre cum se foloseste memsetul. Eu am pus memset(X, 0, sizeof(X)) in loc de memset(X, 0, N).
|
|
|
159
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva educationala / Răspuns: 010 Ciurul lui Eratosthenes
|
: Martie 07, 2009, 12:24:34
|
Am observat ca ultimele mesaje contin informatii gresite despre alocarea dinamica a memorie si modul in care se foloseste functia memset. Avand un pointer *p, pentru a aloca un vector de 1000 de elemente se procedeaza astfel: int *p; p = (int*) malloc( 1000 * sizeof(int) ); sau: int *p; p = new int[1000]; Acum p contine adresa unui bloc rezervat de 1000 de elemente. Toate elentele p[0], p[1] pana la p[999] contin valori reziduale. Ele nu sunt initializate in nici un fel in nici unul din apelurile de mai sus. Putem spune ca au valori aleatoare. Se poate intampla ca toate aceste valori sa fie 0, dar asta e din pura intamplare. Diferenta intre malloc si new este ca ultimul apeleaza constructorul clasei pentru care se face instantierea, dar nu cred ca se pot supraincarca constructorii tipurilor predefinite. Pentru a le initializa cu 0 folosind functia memset procedam in felul urmator: memset(p, 0, 1000 * sizeof(int)); Asta inseamna pentru compilatorul gcc de azi sa puna valoarea 0 pe 4000 de bytes pornind de la adresa pointata de p. sizeof( variabila ) returneaza dimensiunea in bytes a tipului variabila asadar sizeof( p ) va returna pe gcc fie valoarea 4, fie valoarea 8, depinde de configuratia fiecaruia (iar pe borland valoarea 2), si este dimensiunea implicita a oricarui pointer (nu depinde de tipul obiectului pointat ci doar de compilator). sizeof( int ) returneaza valoarea 4 in gcc si 2 in borland, sizeof( long ) returneaza valoarea 4 in gcc si 4 in borland. Daca p ar fi declarat astfel: atunci sizeof(p) ar returna valoarea 4000 pe gcc si 2000 pe borland (face diferenta). Dar aveti grija la urmatorul caz: void f(p[]) { // sizeof( p ) aici este valoarea unui pointer adica 2/4/8 }
int main() { int p[1000]; f(p); } memset( pointer, val_byte, dimensiune ) seteaza valoarea a dimensiune bytes pornind de la pointer cu valoarea val_byte. De exemplu: memset( p, 0, sizeof(p) ) ar seta pe 0 numai pe p[0] (in conditiile in care dimensiunea pointerului e 4, daca e 8 atunci ar seta si p[1]) memset(p, 0x3f, sizeof(int)) sau memset( p, 63, sizeof(int) ) ar seta p[0] cu valoarea cu 1061109567 sau 0x3f3f3f3f pentru ca sunt initializati 4 bytes cu valoarea 0x3f.
|
|
|
162
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 404 Lacuri
|
: Februarie 02, 2009, 14:39:57
|
Am si eu o intrebare... Aceasta problema are evaluator?.....sau doar compara cele doua fisiere? Imi da drum gresit la testul 5 (in rest totul merge perfect), si m-am uitat in testul 5 de la oni....si programul meu scoate un alt drum.....dar un drum corect!!!!!! http://infoarena.ro/job_detail/249897Nu iti afiseaza un drum corect, ci poate numai o bucata din el, primul nod afisat nu este (1, 1). am shi eu aceiasi problema: la testul 2 de ex imi da alt drum decat scrie in raspuns, dar unul corect shi mi se da WA cu Drum gresit! nu shtiti kre ar fi solutia pt rezolvarea problemei?
Pe testul 2 jumate din drumul afisat de tine este (0, 0).
|
|
|
163
|
Comunitate - feedback, proiecte si distractie / Off topic / Răspuns: zgarcenia de a folosi nume de variabile mai lungi de o litera
|
: Ianuarie 27, 2009, 12:07:10
|
ieri am avut o revelatie !!!! de ce merge tot prost ? din cauza matematicii evident dar acuma incep exact sa inteleg.
am realizat ca zgarcenia de a folosi nume de variabile mai lungi de o litera de trage numai din matematica atunci cand orice variabila matematica are un nume de o litera x,y,w,z.
la fel si la informatica "i" e contorul . "a" e matricea , "n" e lungimea.... desi ulterior va avea acces la environmenturi cu autocomplete (de ala care iti scrie el singur) elevul va fi tentat sa foloseasca nume de variabila de o litera.
opriti matematica sa distruga informatica
Dar ce e informatica fara matematica? Cod si nici macar un cod pe care sa il poti intelege. Vei intelege intructiunile dar nu vei intelege ce fac, sau de ce fac. Informatica s-a nascut din matematica. Continutul de pe infoarena se aproprie mai mult de informatica teoretica decat de informatica aplicata iar cei care lucreaza in acest domeniu sunt de cele mai multe ori considerati matematicieni decat informaticieni. Multi dintre utilizatorii infoarena la inceputuri au cochetat cu matematica si mai apoi s-au reorientat spre informatica. Programele pe care le scriem pentru probleme de concursuri nu au un rol practic, ele transmit o idee de rezolvare. Pentru ca sunt numai niste idei, ele nu au un corespondent, asa ca daca ai o matrice, nu stiu cum ai putea sa o numesti, asa ca ii dai ca nume o litera. De asemeni scrierea programului este doar ultima etapa din rezolvarea problemei, problema rezolvandu-se in mare parte pe hartie. "Elevul" pus sa faca ceva practic va realiza foarte repede ca nu poate sa-si denumeasca variabilele cu litere pentru ca a doua zi nu va mai intelege ce a scris in prima zi, asa ca isi va redenumi variabilele.
|
|
|
164
|
Comunitate - feedback, proiecte si distractie / Blog / Răspuns: Problema saptamanii - Monede
|
: Ianuarie 26, 2009, 23:29:06
|
sa se demonstreze ca toata suprafata mesei poate fi acoperita de 4n monede de raza unu care se pot suprapune. Din chestia asta rezulta ca poti suprapune un numar infinit de monezi. Cred ca se cere sa se demonstreze ca se poate acoperi suprafata totala a mesei cu cel mult 4n monede pe cazul general (oricare ar fi lungimea si latimea mesei). Poate nu ai inteles bine problema. Atunci cand alaturi intr-un plan 4 monede iti ramane in mijloc un spatiu pe care trebuie sa il acoperi cu alte monede asezate deasupra. Pe cazul asta cred ca e de ajuns o moneda, dar nu stiu ce se intampla daca dimensiunile cresc.
|
|
|
165
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: putina grafica
|
: Ianuarie 13, 2009, 21:10:44
|
int gdriver = DETECT, gmode; initgraph(&gdriver, &gmode, [path]);
Din cate imi amintesc pentru Borland C++ 3.1 trebuie sa incluzi portiunea de sus inaintea folosirii intructiunii bar, path este un string reprezinta calea pana la directorul BGI din BorlandC, de exemplu "C:\BorlandC\BGI".
|
|
|
167
|
infoarena - concursuri, probleme, evaluator, articole / Algoritmiada 2009 / Răspuns: Algoritmiada 2009, Runda 1
|
: Decembrie 14, 2008, 12:00:53
|
Daca trimitem mai multe solutii pentru o problema, conteaza numai punctajul de la ultima? In caz ca o solutie primeste 100 puncte, se mai iau in considerare urmatoarele solutii trimise pentru aceeasi problema?
Multumesc
Se ia in considerare numai ultima submisie. Asadar daca ai luat 100 pe o sursa si trimiti apoi alta sursa care ia mai putin, sa zicem 60, punctajul tau final la respectiva problema va fi de 60 de puncte.
|
|
|
170
|
infoarena - concursuri, probleme, evaluator, articole / Algoritmiada 2009 / Răspuns: Densitate
|
: Decembrie 14, 2008, 09:42:20
|
mie imi salveaza drept densitat.in nu densitate.in, este corect?
Asta pentru ca folosesti Borland. Compilatoarele moderne nu intampina aceasta problema. Pe inforarena se foloseste gcc 4 si fpc 2 care recunosc corect numele fisierelor. Poti sa testezi local cu ce nume de fisier vrei si atunci cand trimiti pe infoarena sa ai in sursa numele fisierelor densitate.in si o sa mearga.
|
|
|
173
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 344 Drept
|
: Decembrie 01, 2008, 23:34:35
|
Fixezi x1, x2 proiectiile pe axa OX ale laturilor paralele cu OY ale dreptunghiului. Pentru ele tii sortate valorile coordonatelor y ale punctelor cu x intre x1 si x2. Dreptunghiurile cu k puncte se pot determina printr-o simpla iteratie.
Asta fac si eu, dar pentru fiecare pereche x 1 si x 2 trebuie facuta acea sortare daca am inteles bine. Dar, de aici rezulta o complexitate de O(N^2 (pt ca iau fiecare pereche) * NlogN(din sortare)) = O(N^3logN) Ideea e sa o rezolvi fara sa sortezi in O(NlogN). Cand treci de la (x i, x j) la (x i, x j+1) trebuie sa inserezi intr-un sir sortat valorile coordonatelor y pentru care x=x j+1. Daca ai si aceste ultime valori sortate, atunci interclasarea lor se face in O(N).
|
|
|
174
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 344 Drept
|
: Decembrie 01, 2008, 23:19:14
|
Un hint pt N^3 pls.. Fixezi x 1, x 2 proiectiile pe axa OX ale laturilor paralele cu OY ale dreptunghiului. Pentru ele tii sortate valorile coordonatelor y ale punctelor cu x intre x 1 si x 2. Dreptunghiurile cu k puncte se pot determina printr-o simpla iteratie. Eu am implementat problema cu arbori echilibrati, complexitate O(N 2logN + N 3), dar merge prea incet. Optimizarea e cheia problemei.
|
|
|
175
|
Comunitate - feedback, proiecte si distractie / Blog / Răspuns: Algoritmiada in cautare de sigla
|
: Decembrie 01, 2008, 11:52:22
|
Dragut ca ti-ai oferit ajutorul, numai ca numele concursului pentru care cautam sigla este Algoritmiada. PreOni-ul infoarena este de acum de partea trecutului. Asteptam cat mai multe propuneri pentru sigla concursului, preferabil insa care sa mentioneze numele concursului "Algoritmiada", sau care sa sugereze implicit sau explicit o competitie de informatica si programare.
|
|
|
|