Afişează mesaje
|
Pagini: [1]
|
5
|
infoarena - concursuri, probleme, evaluator, articole / Probleme externe / Răspuns: Robot
|
: Ianuarie 17, 2015, 19:58:35
|
Pai virgula de acolo separa variabilele(ca altfel nici nu stiu cum sa zic), in cazul de fata min(a,min(b,c)). Variabila 'Valoare' ramane constanta pe tot parcursul programului(nu se poate modifica), tine loc de '#define Valoare ...'. (1<<30) este echivalent cu 230.1 in binar este in mod uimitor tot 1, iar <<30(Shift left) muta bitii din reprezentarea binara cu 30 de pozitii in stanga. Cand vrei sa dai lui a si b aceiasi valoare, poti sa scri in loc de a=val;b=val; doar a=b=val;(b=val si dupa a=b).
|
|
|
6
|
infoarena - concursuri, probleme, evaluator, articole / Probleme externe / Răspuns: Robot
|
: Ianuarie 17, 2015, 19:29:19
|
1. Nu te opreste nimeni sa folosesti fstream. 2. Trebuie determinat minimul dintre 3 variabile(a,b,c), asa ca determin minimul dintre (b,c) si apoi minimul dintre (a,min(b,c)). 3. Da, min este o functie din biblioteca algorithm.
Te-ar ajuta daca ai considera celula din care pleci radacina unui arbore...
|
|
|
7
|
infoarena - concursuri, probleme, evaluator, articole / Probleme externe / Răspuns: Robot
|
: Decembrie 22, 2014, 19:36:31
|
while(p>0){ l=i; v=j Ce este ingrosat isi are locul inainte de while. Oricum, metoda ta de rezolvare este gresita, problema rezolvandu-se prin programare dinamica. Se va construi alta matrice(sa o numim sol) si in ordine descrescatoare a liniilor, pornind de pe penultima linie sol[ i ][j]=min(sol[i+1][k]+abs(C[ i ][j]-C[i+1][k])), k fiind pe rand j-1, j ,j+1. La urma verificam fiecare element de pe prima linie a matricii nou construite daca este mai mic ca P, asta insemnand ca robotul poate ajunge de acolo pe ultima linie. Iti las si un cod pentru a intelege mai bine(la cat de bine stiu sa explic...) #include<stdio.h> #include<algorithm> using namespace std; const int Valoare=(1<<30); int C[205][205],sol[205][205];bool ok; int modul(int x) { if(x>0) return x; return -x; } int main() { int N,M,P; freopen("robot.in","r",stdin); freopen("robot.out","w",stdout); scanf("%d%d%d",&P,&N,&M); for(int i=1;i<=N;++i) for(int j=1;j<=M;++j) scanf("%d",&C[i][j]); for(int i=0;i<=N+1;++i) sol[i][0]=sol[i][M+1]=Valoare; for(int i=0;i<=M+1;++i) sol[0][i]=sol[N+1][i]=Valoare; for(int i=N-1;i;--i) for(int j=1;j<=M;++j){ sol[i][j]=min(sol[i+1][j-1]+modul(C[i][j]-C[i+1][j-1]),min(sol[i+1][j]+modul(C[i][j]-C[i+1][j]),sol[i+1][j+1]+modul(C[i][j]-C[i+1][j+1]))); } for(int i=1;i<=M;++i) if(sol[1][i]<P){ printf("%d ",i); ok=1; } if(!ok) printf("-1"); fclose(stdin);fclose(stdout); return 0; }
|
|
|
8
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Problema Informatica
|
: August 01, 2014, 16:39:42
|
Ai putea sa retii pozitia primului numar par din sir iar la scrierea tabloului sa nu-l mai afisezi pe acesta. #include<iostream> using namespace std; int N,a[50],par; int main() { cin>>N; for(int i=1;i<=N;++i){ cin>>a[i]; if(!par && a[i]%2==0) par=i; } for(int i=1;i<=N;++i) if(i!=par) cout<<a[i]<<" "; return 0; }
Dar cum cerinta precizeaza "transformarea in memorie a tabloului citit ", va trebui sa mutam cu o pozitie inapoi fiecare element citit dupa primul numar par. #include<iostream> using namespace std; int N,a[50],par,nr; int main() { cin>>N; for(int i=1;i<=N;++i){ cin>>nr; if(!par && nr%2==0){ par=1;continue; } a[i-par]=nr; } for(int i=1;i<=N-par;++i) cout<<a[i]<<" "; return 0; }
|
|
|
11
|
infoarena - concursuri, probleme, evaluator, articole / Concursuri / Răspuns: OJI 2014
|
: Martie 03, 2014, 20:11:10
|
Salut, particip pentru prima oara la olimpiada de informatica, iar la OJI m-am calificat la baraj, puteti sa imi spuneti in ce consta acest baraj?
Barajul este organizat de judetul tau, o sa va adunati toti de la baraj intr-o sala cu calculatoare si o sa mai dati inca o proba asemanatoare cu OJI. Daca sunteti 3 la baraj si aveti 2 locuri libere atunci primii 2 de la aceasta proba o sa se califice. Timpul si numarul problemelor vor fii aceleasi ca si la OJI sa inteleg?
|
|
|
12
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 006 Factorial
|
: Februarie 17, 2014, 22:21:33
|
Eu am rezolvat astfel problema..... cu toate ca rezultatele imi dau primesc decat 25 de puncte #include<iostream> #include<fstream> using namespace std; ifstream f("fact.in"); ofstream g("fact.out"); int main() { int p,nr2,nr5,nr,x,k,minim; f>>p; nr2=0; nr5=0; nr=0; k=2; while(nr<p) { x=k; while(x%2==0) { nr2++; x=x/2; } while(x%5==0) { nr5++; x=x/5; } if(nr2<nr5) minim=nr2; else minim=nr5; nr=nr+minim; nr2=nr2-minim; nr5=nr5-minim; k++; } k--; if(nr==p) g<<k; else g<<"-1"; return 0; } Iti da "decat" 25 de puncte fiindca iti iese din timp(Time limit exceeded.). Din cate vad tu aflii si puterea lui 2, ceea ce este inutil fiindca puterea lui 2 va fi mai mare ca puterea lui 5. Poate te va ajuta si urmatorul post: Eu nu inteleg de ce trebuie cautare binara si nici nu prea inteleg implementarea in problema asta. Putem sa ne bazam doar pe cateva observatii matematice : 5*2 = 10, deci numarul de zerouri are legatura cu puterile lui 5. Deci p se poate calcula ca mai jos si mai gasim o observatie (4p<=n) : ![](http://img851.imageshack.us/img851/9739/msp339519gdf29g45030d6d.gif) Asa ca putem calcula numarul de zerouri impartindu-l pe n la 5 pentru fiecare numar incepand cu n=4*p pana cand gasim numarul p cautat si se obtine o complexitate mai buna decat log2(P) cu doar 33 iteratii pentru p=10^8.
|
|
|
13
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 474 Teams
|
: Februarie 09, 2014, 19:55:20
|
![Winner 1st place](http://www.infoarena.ro/forum/Smileys/default/winner_first_h4h.gif) Am ajuns sa cred ca problema asta e blestemata... Ce greseam eu la parsare(sau citire...)?Retin doar numerele mai mici ca b. freopen("teams.in","r",stdin); scanf("%d %d %d \n",&n,&a,&b); gets(s);fclose(stdin);n=0; for(i=0;s[i]!='\0';i++) if(s[i]==' ') {if(nr<=b)v[++n]=nr;nr=0;} else nr=nr*10+s[i]-'0'; if(nr<=b)v[++n]=nr;nr=0;
|
|
|
14
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Numere din fisier
|
: Ianuarie 18, 2014, 09:41:23
|
Tu daca gasesti un numar care se divide cu 'n' il scrii iar daca nu se divide scrii "nu exista". Asa ar trebuii sa mearga: #include <iostream> #include <fstream> using namespace std; int main() { int n,k;bool sw=0; cin>>n; ifstream f("numere.txt"); while(f>>k) if(k%n==0) {cout<<k<<" ";sw=1;} if(sw==0) cout<<"nu exista"; return 0; }
|
|
|
15
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 486 Reactivi
|
: Ianuarie 11, 2014, 23:26:20
|
pai ca sa fie un numar cat mai mic de frigidere nu ar trebui sa vedem care substante am nevoie de acelasi frigider adica dintre 2 substante sa fie una care are min mai mare decat celalalt si max mai mic decat acea subst nu
Bagi o substanta in frigider, setezi temperaturile si pe masura ce bagi si alte substante in acel frigider modifici temperaturile. fmin=temperatura minima a frigiderului si fmax= temperatura maxima a frigiderului. Vei avea urmatoarele situatii: intervalul [min,max] este cuprins de intervalul [fmin,fmax]/doar max apartine intervalului [fmin,fmax]/doar min apartine lui [fmin,fmax].
|
|
|
|