Afişează mesaje
|
Pagini: 1 [2]
|
28
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 387 Distincte
|
: Iunie 27, 2013, 17:42:48
|
int calculeaza (int x,int y) { int i,sum=0; bool h[NMax]={0}; for (i=x;i<=y;i++) { if (h[v[i]]) i++; else { sum=sum+v[i]; h[v[i]]=1; } } return sum; }
Ce este gresit la acest subprogram care calculeaza suma elementelor distincte intre pozitiile x si y ([x;y]) in v[] retin elementele vectorului si h[] e un fel de vector caracteristic (am incercat sa fac un fel de hash...nu prea ma pricep)
|
|
|
31
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 295 Noroc
|
: Iunie 26, 2013, 18:30:49
|
Innebunesc ^_^ !!! Ce este gresit??? #include <fstream> #include <iomanip> using namespace std; ifstream f("noroc.in"); ofstream g("noroc.out"); int main () { double x,m,rez; f>>x>>m; rez=(formula pentru probabilitate); if (m<=x && m>=0 && x>=0) {g<<100.0000000;return 0;} if (rez<0) {g<<0.0000000;return 0;} if (m<0) {g<<0.0000000;return 0;} if (x<0) {g<<0.0000000;return 0;} g<<fixed<<setprecision(7)<<rez; }
Daca scot cele 4 if-uri iau 80...daca le bag iau 70...ce cazuri speciale sunt pe testele 3, 4 si 5? Putin ajutor? L.E: M-am mai uitat pe restrictiile problemei si am scos if-urile si am lasat doar "if (x>=m) {g<<0.0000000;return 0;}" pt ca 1<=x,m<=32000...tot 80 de puncte iau...nu vad ce cazuri speciale ar mai fi.
|
|
|
33
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva educationala / Răspuns: 035 Subsecventa de suma maxima
|
: Iunie 23, 2013, 00:05:56
|
Aha..m-am prins, am sa incerc sa implementez ceva maine (adica azi )... Multumesc mult!! EDIT:Bun...am incercat sa modific programul a.i. sa aiba complexitate O(n) si sa nu-mi mai dea WA la testele 3,4 si 10. Dupa cateva incercari am zis sa apelez la 'BF' (brute force) si sa mai fac o parcurgere la sf programului (O(2*n)) a.i. sa-mi gaseasca, daca exista, o subsecventa de la lungime 1 care sa fie maxima...n-a mers...tot primesc WA pe 3,4 si 10. Alte idei???
|
|
|
37
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva educationala / Răspuns: Labirint
|
: Februarie 26, 2013, 14:18:59
|
Multumesc! Neatentia asta... Bun...momentan stiu ca algoritmul merge binisor dar mai am o eroare. Testul de iesire este: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 2 -1 0 0 0 3 2 0 0 0 0 0 4 3 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 Deci...la inceput e ceva gresit, deoarece pe parcurs vad ca merge. Test de iesire bun: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 2 1 -1 0 0 0 4 3 2 0 0 0 0 5 4 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 EDIT: Gata am rezolvat : Problema era de la acel "-1" si pentru rezolvare am schimbat randul b[l[0]][c[0]]=a[l[0]][c[0]]; cu b[l[0]][c[0]]=a[l[0]][c[0]]=0; (in speranta ca va mai avea cineva nevoie )
|
|
|
38
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva educationala / Labirint
|
: Februarie 25, 2013, 22:52:12
|
Am incercat sa rezolv o problema cu un labirint (mai exact https://infoarena.ro/algoritmul-lee prima), dar imi intra in bucla infinita. Problema este partial rezolvata...adica am incercat s-o fac pana la afisarea celei de a 2-a matrici (in care am retinut nr de pasi) Sugestii? Sursa : #include <iostream> #include <fstream> using namespace std; ifstream f("labirint.in"); ofstream g("labirint.out"); void bordare (int m, int n,int a[100][100]) { int k; for (k=0;k<=n;k++) { a[0][k]=0; } for (k=0;k<=n;k++) { a[n+1][k]=0; } for (k=n+1;k>=1;k--) { a[k][m+1]=0; } for (k=m+1;k>=1;k--) { a[k][0]=0; } } int main () { int a[100][100],b[100][100]={0},d1[]={0,1,0,-1},d2[]={-1,0,1,0},l[1000],c[1000],x,y,x1,y1,i,j,m,n,k; f>>m>>n; for (i=1;i<=m;i++) { for (j=1;j<=n;j++) { f>>a[i][j]; } } bordare (m,n,a); for (i=1;i<=m;i++) { for (j=1;j<=n;j++) { if (a[i][j]==-1) {l[0]=i;c[0]=j;} } } b[l[0]][c[0]]=a[l[0]][c[0]]; i=j=0; while (i<=j) { x=l[i]; y=c[i]; for (k=0;j<4;k++) { x1=x+d1[k]; y1=y+d2[k]; if (a[x1][y1]!=0) { if (b[x1][y1]==0) { b[x1][y1]=a[x1][y1]+b[x][y]; j++; l[j]=x1; c[j]=y1; } else if (b[x][y]+a[x1][y1]<b[x1][y1]) { b[x1][y1]=b[x][y]+a[x1][y1]; j++; l[j]=x1;c[j]=y1; } } } i++; } for (i=0;i<=m+1;i++) { for (j=0;j<=n+1;j++) { cout<<b[i][j]<<" "; } cout<<endl; } } PS:am modificat putin enuntul problemei (am inversat 0 cu 1) adica testul este cam asa : 5 5 0 0 0 0 0 0 1 1 1 -1 0 1 1 0 0 0 1 1 0 0 0 1 0 0 0 -si se poate merge doar pe 1
|
|
|
|