infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Ungureanu Daniel din Aprilie 07, 2008, 19:20:13



Titlul: HELP
Scris de: Ungureanu Daniel din Aprilie 07, 2008, 19:20:13
Buna ziua.

As dori sa va cer ajutor.

Daca aveti putin timp as vrea sa ma ajuti la urmatoarele nedumeriri.

1. Ce materie ar trebuii sa stiu pentru a avea o sansa la olimpiada.

2. Ce tip de compilator se utilizeaza la ONI, este aceelasi cu cel folosit la infoarena. Si daca da, care este, deoarece eu am unul (TC, compilator pe windows), si fata de cel folosit de infoarena nu imi accepta mai mult de 65000 de variabile (ex. int a[65000]).

3. Stiu ca este putin cam mult, dar daca puteti, as vrea sa imi spuneti si mie de unde as putea gasii mai multe materiale gen cele de la "Arhiva educationala".


Va multumesc anticipat.
Ungureanu Daniel.


Titlul: Răspuns: HELP
Scris de: Pripoae Teodor Anton din Aprilie 07, 2008, 19:27:59
La ONI ai evaluare pe linux (cu gcc / g++) sau pe windows cu borland

pe linux se foloseste acelasi compilator ca cel de pe ia (nu stiu exact daca aceeasi versiune dar e la fel)

pe windows e BC 3.1 care e aproximativ la fel cu TC


Incearca ca si compilatoare:

Dev C++ (e foarte bun pentru windows dar nu il ai la olimpiada) http://www.bloodshed.net/devcpp.html (http://www.bloodshed.net/devcpp.html)

sau

DJGPP http://infoarena.ro/djgpp-instalarea-de-la-a-la-z (http://infoarena.ro/djgpp-instalarea-de-la-a-la-z) (asta e la ONI)

si incearca problemele date anul trecut de la ONI (sunt in arhiva infoarena)


spor  :)


Titlul: Răspuns: HELP
Scris de: Andrei Grigorean din Aprilie 07, 2008, 19:55:03
La ONI la clasele 11-12 nu se compileaza decat sub Linux. Da, este acelasi compilator ca pe infoarena, insa cred ca alta versiune.

Ar trebui sa stii cam tot pentru olimpiada :). E cam tarziu sa te apuci acum, incearca sa citesti de prin cartea Introducere in algoritmi (o gasesti la Links).


Titlul: Răspuns: HELP
Scris de: Cosmin Negruseri din Aprilie 12, 2008, 13:20:05
Poti sa te uiti la http://infoarena.ro/training-path daca vrei sa te sperii.



Titlul: Răspuns: HELP
Scris de: Ungureanu Daniel din Aprilie 12, 2008, 18:38:21
Merci mult Cosmin, exact asa ceva imi trebuia :D  :ok:

 :banana: ieee acuma am dupa ce sa invat  :yahoo:

Cine mai are sa-mi dea ceva asemanator, va rog :)


Titlul: Răspuns: HELP
Scris de: Paul-Dan Baltescu din Aprilie 12, 2008, 22:03:04
http://ace.delos.com/usacogate.

Aici gasesti o lista mai putin completa, dar structurata (teoretic) dupa gradul de dificultate.


Titlul: Răspuns: HELP
Scris de: Andrei Misarca din Aprilie 15, 2008, 23:29:15
Am si io o intrebare : Daca vreau sa citesc si sa afisez niste variabile declarate string cum tre sa fac?

Ca am facut
Cod:
string b;
scanf("%s",&b);
printf("%s\n",b);

Si n-a prea vrut.  :)


Titlul: Răspuns: HELP
Scris de: Stefan Istrate din Aprilie 15, 2008, 23:36:13
Clasa string detine o metoda c_str() care il converteste intr-un char*. Deci afisezi
Cod:
string b;
printf("%s\n", b.c_str());
Iar pentru citire, citesti intr-un vector normal (char*) si il convertesti cu
Cod:
string b;
char c[100];
scanf("%s", c);
b = string(c);


Titlul: Răspuns: HELP
Scris de: Andrei Grigorean din Aprilie 15, 2008, 23:39:16
Baga cu streamuri. Ar trebui sa mearga si mai bine.


Titlul: Răspuns: HELP
Scris de: Andrei Misarca din Aprilie 16, 2008, 10:25:24
Da' citirea cu streamuri nu e cva mai inceata?


Titlul: Răspuns: HELP
Scris de: Mircea Dima din Aprilie 16, 2008, 11:46:39
Pe infoarena compilatorul este g++ 4.2 , versiune ce are streamurile imbunatatite...adica sunt mai rapide aici.


Titlul: Răspuns: HELP
Scris de: Ungureanu Daniel din Aprilie 17, 2008, 14:55:24
Mai am si eu niste intrebari :D.

1. ce facei ">>"? da "^"

2. ma poate ajuta cineva sa inteleg "Coduri Gray"

3. in Dev-C++ unde trebuie sa pun fisierele de intrare, sau in ce setari trebuie sa umblu ca sa setez de unde sa le ia.

Multumesc anticipat.


Titlul: Răspuns: HELP
Scris de: Andrei Misarca din Aprilie 17, 2008, 15:14:59
'>>' e deplasare pe biti. x>>k e echivalent cu x/(2 la k), dar e mult mai rapida
'^' e XOR pe biti(sau exclusiv)
1^1 = 0^0 = 0
0^1 = 1^0 = 1

in dev fisierele .in si .out se deschid ca si cele .cpp, dar trebuie sa-i dai sa-ti afiseze toate fisierele


Titlul: Răspuns: HELP
Scris de: Bogdan-Alexandru Stoica din Aprilie 17, 2008, 15:17:25
Despre Coduri Gray gaesesti aici (http://en.wikipedia.org/wiki/Gray_code) mai mult decat strictul necesar.


Titlul: Răspuns: HELP
Scris de: Achim Ioan Alexandru din Aprilie 17, 2008, 15:25:39
Sau...tot pentru Coduri Gray...cateva explicatii, plus aplicare pe probleme: http://infoarena.ro/coduri-gray


Titlul: Răspuns: HELP
Scris de: Ungureanu Daniel din Aprilie 18, 2008, 01:13:05
Puteti sa-mi dati si mie exemple de scripturi pentru:

# Intersectie a doua segmente

# Punct in interiorul unui poligon (poligon convex)

# Aria unui poligon

Va multumesc anticipat.


Titlul: Răspuns: HELP
Scris de: Andrei Grigorean din Aprilie 18, 2008, 01:30:05
http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=alg_index Intra pe tutorialele de geometrie :)


Titlul: Răspuns: HELP
Scris de: Bogdan-Alexandru Stoica din Aprilie 18, 2008, 10:29:12
dupa ce ai citit articolele de pe TC, poti sa te uiti peste problemele de geometrie aduna de Cosmin Negruseri (http://infoarena.ro/implica-te/scrie-articole)


Titlul: Răspuns: HELP
Scris de: Stefan Istrate din Aprilie 18, 2008, 22:20:26
@Goody: Daca ai alte intrebari legate de alte subiecte, atunci creeaza topicuri noi. Nu amestecate treburile intre ele. Ti-am mutat mesajul aici: http://infoarena.ro/forum/index.php?topic=3005.0


Titlul: Răspuns: HELP
Scris de: Ungureanu Daniel din Aprilie 22, 2008, 14:33:27
Mai am si eu o intrebare, putem sa initiam de la inceput un vector precum initiem un caracter, fara a folosi un for, adica:

int a=9
int a[9]={1,2,3,4,5,6,7,8,9}
char a[9]="abcdefghi"
......

Da putem sa facem:
ex.
max=1.000.000
int a[max]=0 (sa facem toate valorile lui a = 0 doar din initiere)

Va multumesc anticipat.


Titlul: Răspuns: HELP
Scris de: Andrei Grigorean din Aprilie 22, 2008, 14:35:15
Poti sa intializezi cu 0 asa:

Cod:
int A[MAXN] = {0};


Titlul: Răspuns: HELP
Scris de: Ungureanu Daniel din Aprilie 22, 2008, 14:42:59
Da am avantaj la timp?

pierd mai mult timp daca folosesc for(i=1;i<=n;i++) a[ i ]=0;, decat int a[n]={0} ?

Si in cazut acesta, de ex., daca ar trebuii sa il initiez pe a[n] de mai multe ori cu 0 si imi trebuie doar intr-o functie, ar fi mai avantajos sa nu il fac global si sa il initiez de fiecare data int a[n]={0}?

Editat de admin: Pune spatii in constructii de genul a[ i ] intre i si parantezele patrate, pentru ca altfel se interpreteaza ca fiind tagul de scris italic


Titlul: Răspuns: HELP
Scris de: Andrei Grigorean din Aprilie 22, 2008, 14:51:34
Cel mai rapid cred ca e cu functia memset.


Titlul: Răspuns: HELP
Scris de: Stefan Istrate din Aprilie 22, 2008, 15:02:17
Poti sa intializezi cu 0 asa:

Cod:
int A[MAXN] = {0};

Asta initializeaza cu 0 doar pe A[0]. Ia declara vectorul A local sa te convingi ca celelalte valori raman random.


Titlul: Răspuns: HELP
Scris de: Andrei Grigorean din Aprilie 22, 2008, 15:17:07
Nu prea iti faci tu temele pentru facultate :P. Ia testeaza tu sa vezi ca-i asa cum zic eu :).

Later Edit: Jmenu asta l-am vazut pe tc la Zuza prima data.


Titlul: Răspuns: HELP
Scris de: Ungureanu Daniel din Aprilie 22, 2008, 15:46:46
Are dreptate stef2n, am facut a[n]={1} si doar pe a[0] l-a facut 1... deci nu merge initierea :(


Titlul: Răspuns: HELP
Scris de: Sima Cotizo din Aprilie 22, 2008, 16:07:26
Pai intamplarea face sa aiba dreptate amandoi :P

De fapt A[] = {0} va incepe initializarea tuturor elementelor cu elementele pe care le introduci tu - daca unele elem nu le setezi atunci se presupune implicit ca e vorba de 0:
Cod:
int A[20] = {1,2,3};

=> {1,2,3,0,0,0...}

Cod:
int A[20] = {};

=> {0,0,0,0,...}


Titlul: Răspuns: HELP
Scris de: Andrei Grigorean din Aprilie 22, 2008, 16:18:40
Daca vrei sa initializezi cu o valoarea diferita de 0 e cel mai sigur sa faci cu for.


Titlul: Răspuns: HELP
Scris de: Cosmin Negruseri din Aprilie 22, 2008, 16:30:05
Cu memset poti initializa frumos si cu -1.


Titlul: Răspuns: HELP
Scris de: Ungureanu Daniel din Aprilie 22, 2008, 16:30:51
Si cum e "memset"?


Citeama acuma la "Lucrul cu numere mari" http://infoarena.ro/lucrul-cu-nr-mari  si nu pricep care e diferenta dintre:

huge a;
si
int a[100];

Si daca e o diferenta va rog sa-mi explicati si mie :)


Titlul: Răspuns: HELP
Scris de: Andrei Grigorean din Aprilie 22, 2008, 16:38:07
Pentru memset : http://www.fuckinggoogleit.com/

Cod:
memset(a, sizeof(a), 0);

Probabil ca huge este un typedef. Nu exista nicio diferenta intre cele 2 alternative.

Avand in vedere ca esti incepator si mai este putin timp pana la ONI ti-as recomanda sa nu mai ingrasi porcul in ajun, ci sa faci cum ai facut pana acum. Toate smecheriile astea de limbaj s-ar putea sa te incurce, nu sa te ajute, daca nu le stapanesti bine.


Titlul: Răspuns: HELP
Scris de: Ungureanu Daniel din Aprilie 22, 2008, 16:42:05
 :oops: fiecare da cu banu.. nu? Incerc sa invat si eu ce pot, in timpul pe care il mai am :)
Oricum "smecheria" deja o stiam da doream sa stiu daca e ceva in + la huge

Stiu deja k nu am cine stie ce sanse la ONI, da eu dupa judeteana am avut punctajul cel mai mic :|.. deci incerc sa trag, macar sa nu ies pe ultimu loc, sa ies si eu pe penultimul  :oops:


Titlul: Răspuns: HELP
Scris de: Sima Cotizo din Aprilie 22, 2008, 16:52:55
Pentru memset : http://www.fuckinggoogleit.com/

Cod:
memset(a, sizeof(a), 0);

Asta e corect doar daca nu vrei sa umpli vreun element din a cu sizeof(a) ...
Cred ca se voia asta:
Cod:
memset(a, 0, sizeof(a));

Daniel, fii mai relaxat ;) nu sti de unde sare iepurele! (de Paste :P)


Titlul: Răspuns: HELP
Scris de: Bogdan-Alexandru Stoica din Aprilie 22, 2008, 17:08:48
daniel, parerea mea este ca atunci cand vrei sa initializezi un vector cu o valoare, sa faci cu for. este o metoda sigura si clara. nu o sa conteze prea tare (la timp ma refer) daca faci cu memset, int A[]={0}, sau cu for. in cel mai rau caz (daca esti fff ghinionist) o sa-ti iasa din timp maxim un test, din cauza initializarii unui vector.  :ok:


Titlul: Răspuns: HELP
Scris de: Andrei Grigorean din Aprilie 22, 2008, 17:24:25
Pentru memset : http://www.fuckinggoogleit.com/

Cod:
memset(a, sizeof(a), 0);

Asta e corect doar daca nu vrei sa umpli vreun element din a cu sizeof(a) ...
Cred ca se voia asta:
Cod:
memset(a, 0, sizeof(a));

Daniel, fii mai relaxat ;) nu sti de unde sare iepurele! (de Paste :P)


Oups....  :oops:

Functia memset ia 3 argumente:
1 - pointer catre adresa de unde incepe initializarea
2 - valoarea cu care initializezi (tratata ca unsigned char)
3 - marimea in bytes.


Titlul: Răspuns: HELP
Scris de: Cosmin Negruseri din Aprilie 22, 2008, 17:30:46
Decat sa incerci sa inveti multe chestii rapid, mai bine incerci sa implementezi chestii simple sa vezi ca iti ies. Si in concurs cand ai idei sa poti sa implementezi ce iti trece prin cap. Chiar daca solutia e una naiva tot prinde ceva puncte. Cu cateva zile inainte de ONI nu are rost sa inveti tehnici avansate.

Mai bine te antrenezi cu probleme de la o clasa mai mica, ca sa iti fie mai usoare si sa le poti face. Cred ca asa ai sanse sa scoti rezultate mai bune decat sa citesti o gramada de chestii si sa nu ramai cu nimic.


Titlul: Răspuns: HELP
Scris de: Ungureanu Daniel din Aprilie 22, 2008, 18:56:35
Ce intelegeti prin:

int dist = onEdge?INF:0;

http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=geometry2
-> este folosit la explicarea "ConvexHull" ultima explicatie


Titlul: Răspuns: HELP
Scris de: Lucian Boca din Aprilie 22, 2008, 19:15:25
?: este un operator ternar, iar expresia a?b:c intoarce valoarea b daca a este true (sau diferit de 0), altfel intoarce valoarea c.
Spre exemplu:
Cod:
int x = ( 2<3 ) ? 1 : 0;
va pune in x valoarea 1, pentru ca 2<3
Un exemplu mai practic este
Cod:
int MIN( int x, int y ) {
return x<y ? x : y;
}
Aceasta functie returneaza minimul dintre x si y.


Titlul: Răspuns: HELP
Scris de: Andrei Misarca din Aprilie 29, 2008, 16:08:08
Am o intrebare... am citit intr-o sectiune a forumului(nu mai stiu exact unde) ca define-urile sunt pur evil. Tot ce inseamna define e evil? Chiar si
Cod:
#define MAX_N 100
Am vazut intr-o sursa pr TC pentru parcurgerea unui vector ceva de genu
Cod:
#define foreach(it,v) for(typeof v.begin() it = v.beign(); it != v.end(); it++)
Pentru ce cazuri exista riscul sa 'crape'?


Titlul: Răspuns: HELP
Scris de: Stefan Istrate din Aprilie 29, 2008, 19:24:14
Macro-urile sunt evil din alte puncte de vedere, nu neaparat din cauza ca o sa crape. In general, folosirea lor denota oarecare frustrari pe care le ai fata de limbaj:
Cod:
FOR(i,a,b)
in loc de
Cod:
for(i = a; i <= b; ++i)
sau "pb" in loc de "push_back", "mp" in loc de "make_pair" etc. Comoditatea aceasta poate fi scuzata intr-un concurs de cateva ore de tip olimpiada sau topcoder (se poate castiga un plus de viteza la implementare, desi in general depinde de la om la om), dar intr-o aplicatie complexa la care lucreaza o intreaga echipa, recurgerea la astfel de tertipuri este total nepractica.
Pe de alta parte, folosirea macro-urilor poate introduce probleme serioase. De exemplu, apelarea lui
Cod:
#define MIN(x, y) ((x) < (y) ? (x) : (y))
pentru un argument de tip functie, MIN(x, f(y)), determina apelarea functiei f() de 2 ori (daca x >= f(y)), ceea ce poate fi costisitor.


Titlul: Răspuns: HELP
Scris de: Andrei Misarca din Aprilie 29, 2008, 19:33:56
Citat
pentru un argument de tip functie, MIN(x, f(y)), determina apelarea functiei f() de 2 ori (daca x >= f(y)), ceea ce poate fi costisitor.
Dar daca declar functia
Cod:
int min(int a, int b)
{
    return (a < b)? a : b;
}
si o apelez cu min(x,f(x)) nu e cam acelasi lucru pentru cazul in care x>f(x)?


Titlul: Răspuns: HELP
Scris de: Stefan Istrate din Aprilie 29, 2008, 19:38:45
Nu, pentru ca inainte sa se calculeze minimul, valorile x si f(x) sunt transferate unor variabile a si b. Practic, inainte de a se afla minimul, au loc atribuirile
Cod:
a = x;
b = f(x);


Titlul: Răspuns: HELP
Scris de: Andrei Grigorean din Aprilie 30, 2008, 12:11:24
In loc de macrouri, folositi functii inline atunci cand codul functiei este foarte scurt (2-3 randuri). Sunt sigure si rapide (se comporta ca niste functii normale doar ca au si avantajele macrourilor de viteza).

Cod:
inline int max(int a, int b) { return (a > b ? a : b); }


Titlul: Răspuns: HELP
Scris de: Herpesius din August 06, 2008, 16:35:54
Cod:
int A[20]={0}
Pe Borland n-a mers. Din cauza asta am pierdut la OJI 2008 36puncte.... pe gcc mergea perfect ... dar nha la olimpiade dispunem de cele mai bune compilatoare din anii 80' , nu ? Noi să fim sănătoşi....