•stef2n
|
 |
« : Martie 12, 2010, 20:50:45 » |
|
Aici puteti discuta despre problema Expresie.
|
|
|
Memorat
|
Exista 10 categorii de oameni: cei care inteleg sistemul binar si cei care nu il inteleg.
|
|
|
•Procopliuc
Strain
Karma: 2
Deconectat
Mesaje: 6
|
 |
« Răspunde #1 : Mai 27, 2010, 20:13:51 » |
|
Pentru cei care iau incorect la testele 7 si 8: raspunsul depaseste int, declarati long long
|
|
|
Memorat
|
|
|
|
•noru
Strain
Karma: 1
Deconectat
Mesaje: 5
|
 |
« Răspunde #2 : Martie 12, 2011, 07:46:31 » |
|
iau 60 de puncte, imi da gresit si la primul test daca bag manual testele imi afiseaza bine si, bineinteles, se incadreaza si in timp  care ar fi problema? http://infoarena.ro/job_detail/541993
|
|
|
Memorat
|
|
|
|
•skull
Client obisnuit

Karma: 17
Deconectat
Mesaje: 75
|
 |
« Răspunde #3 : Martie 12, 2011, 08:34:48 » |
|
Nu-ti putem vedea sursa si oricum nu cred ca are cineva timp sa faca debugging. Ar fi mai bine daca ne-ai spune ideea ta de rezolvare.
|
|
|
Memorat
|
|
|
|
•david_rauca
Strain
Karma: 0
Deconectat
Mesaje: 3
|
 |
« Răspunde #4 : Martie 14, 2011, 12:14:09 » |
|
Ma poate ajuta cnv cu idee pentru testele 7-8...am pus long long si tot nu le iau ... 
|
|
|
Memorat
|
|
|
|
•Oancea.Catalin
Client obisnuit

Karma: -3
Deconectat
Mesaje: 75
|
 |
« Răspunde #5 : Martie 15, 2011, 23:44:57 » |
|
Atentie cand inmultirile sunt una dupa alta! Nu pot vedea acele teste si nu iti pot vedea nici sursa.
|
|
|
Memorat
|
|
|
|
•noru
Strain
Karma: 1
Deconectat
Mesaje: 5
|
 |
« Răspunde #6 : Martie 15, 2011, 23:56:21 » |
|
testul 1 este 5 12 5 1 3 5 metoda la care m-am gandit este sa fac maximul a 3 elemente citite consecutiv si inca 2 maximuri a cate 2 elemente citite consecutiv, respectiv le retin indicii. pt exemplul de sus ar fi max1=12*5*1 (maximul a 3 elemente) si max2=12*5 si max3=3*5( celelalte 2 maximuri). intreb care e mai mare (max1 sau max2+max3) pun intr-un S pe cel mai mare, si fac, cu ajutorul indicilor retinuti mai sus, elementele inmultite ale numarului mai mare egale cu 0 in vectorul in care am citit toate numerele. daca initial este v: 12 5 1 3 5, dupa va fi v: 0 0 1 0 0 apoi fac suma. nu prea ma pricep sa explic, sunt si in clasa a 9a (am inceput informatica de anul asta) asa ca ...  EDIT: #include<fstream.h> int a[1001]; int main() { int n,x,i,k1,k2,k3,k4,k5,k6,k7; long long max1=0,max2=0,max3=0,s=0; ifstream f("expresie.in"); ofstream g("expresie.out"); f>>n; k1=k2=k3=k4=k5=k6=k7=0; for (i=1;i<=n;i++) f>>a[i]; for (i=2;i<=n-1;i++) { if (a[i-1]*a[i]*a[i+1]>max1) { max1=a[i-1]*a[i]*a[i+1]; k1=i-1; k2=i; k3=i+1; } if (a[i]>max2) { max3=max2; max2=a[i]; k5=k4; k4=i; } else if (a[i]>max3) { max3=a[i]; k5=i; } } if (a[k4]*a[k4+1]>a[k4-1]*a[k4]) {max2=a[k4]*a[k4+1];k6=k4+1;} else {max2=a[k4]*a[k4-1];k6=k4-1;} if (a[k5]*a[k5+1]>a[k5-1]*a[k5]) {max3=a[k5]*a[k5+1];k7=k5+1;} else {max3=a[k5]*a[k5-1];k7=k5-1;} if (max2+max3>max1) { a[k4]=0; a[k5]=0; a[k6]=0; a[k7]=0; s+=max2+max3; } else { a[k1]=0; a[k2]=0; a[k3]=0; s+=max1; } for (i=1;i<=n;i++) s+=a[i]; g<<s; f.close(); g.close(); return 0; }
EDIT II: am vazut unde buseam:D eu aflam cele mai mari 2 numere nu produsul cel mai mare a 2 numere consecutive ... mda, mersi oricum  80p, gresit testul 7 si 8 unde cred ca trebuie facut cu suma si produs de numere mari (in vector).
|
|
« Ultima modificare: Martie 16, 2011, 07:24:29 de către Ilies Norbert »
|
Memorat
|
|
|
|
•skull
Client obisnuit

Karma: 17
Deconectat
Mesaje: 75
|
 |
« Răspunde #7 : Martie 16, 2011, 08:48:50 » |
|
Nu e nevoie de numere mari. Suma intra in long long.
|
|
|
Memorat
|
|
|
|
•noru
Strain
Karma: 1
Deconectat
Mesaje: 5
|
 |
« Răspunde #8 : Martie 16, 2011, 10:38:41 » |
|
trebuia sa declar vectorul cu long long  eh, sunt incepator mersi 
|
|
|
Memorat
|
|
|
|
•maritim
|
 |
« Răspunde #9 : Aprilie 22, 2011, 14:29:40 » |
|
Imi poate explica si mie cineva de ce trebuia declarat vectorul long long, deoarece 1...10000 intra si in int!
|
|
|
Memorat
|
|
|
|
•Smaug-
Strain
Karma: 5
Deconectat
Mesaje: 11
|
 |
« Răspunde #10 : Ianuarie 16, 2012, 13:15:41 » |
|
Doar sa clarific de ce multora le merge dupa ce declara vectorul long long: int A[MAXN]; long long product = A[i]*A[i-1]*A[i-2]; Daca vectorul A contine valori indeajuns de mari inmultirea va face overflow si valoarea alocata lui product va fi eronata. Corect scris ar fi; int A[MAXN]; long long product = (long long)A[i]*(long long)A[i-1]*(long long)A[i-2];
|
|
|
Memorat
|
|
|
|
•Eby7
Strain
Karma: 0
Deconectat
Mesaje: 6
|
 |
« Răspunde #11 : Septembrie 11, 2012, 10:22:12 » |
|
Are cineva idee de ce imi da gresit la testul 9?
|
|
|
Memorat
|
|
|
|
•danalex97
|
 |
« Răspunde #12 : Septembrie 11, 2012, 11:50:59 » |
|
Poti sa rezolvi problema http://infoarena.ro/problema/evaluare la care ai teste disponibile si apoi poti reveni la problema asta. Asa sigur iti vei da seama unde gresesti.  Daca nici asa nu te descurci vezi ca problema s-a dat la oji deci ar trebui sa fie testele pe http://olimpiada.info.
|
|
|
Memorat
|
|
|
|
•vendetta
|
 |
« Răspunde #13 : Septembrie 11, 2012, 12:02:22 » |
|
Care e legatura dintre cele 2 probleme?
|
|
|
Memorat
|
|
|
|
•danalex97
|
 |
« Răspunde #14 : Septembrie 11, 2012, 13:20:15 » |
|
Pardon  . Am citit la repezeala si , cum am vazut ca e oji , aveam impresia ca e evaluare de expresie fara paranteze. Desi nu are nici cea mai vaga legatura. 
|
|
|
Memorat
|
|
|
|
•georgerapeanu
Strain
Karma: 8
Deconectat
Mesaje: 47
|
 |
« Răspunde #15 : Aprilie 17, 2016, 08:07:46 » |
|
Salut.Ma poate ajuta cineva? Am 2 surse.una in care am declarat totul cu int, si una in care am declarat totul cu long long Cea care e cu int da 80 de puncte,cu incorect pe 7 si 8. Dar cea cu long long imi da 0 la toate,chiar daca e exeact aceasi sursa. Am facut o programare dinamica unde M[j]=suma maxima pana in elementul j avand folosite doar i inmultiri Cod: #include <cstdio> #include <algorithm> using namespace std; FILE *f=fopen("expresie.in","r"); FILE *g=fopen("expresie.out","w"); long long N,i,j; long long V[1005]; long long M[3][1005]; int main() { fscanf(f,"%lld",&N); for(i=1;i<=N;i++) { fscanf(f,"%lld",&V); M[0]=M[0][i-1]+V; M[1]=max(M[1][i-1]+V,M[0][i-2]+V[i-1]*V); M[2]=max(M[2][i-1]+V,max(M[1][i-2]+V[i-1]*V,M[0][i-3]+V[i-2]*V[i-1]*V)); } fprintf(g,"%lld",M[2][N]); fclose(f); fclose(g); return 0; }
|
|
|
Memorat
|
|
|
|
•AlexandruValeanu
|
 |
« Răspunde #16 : Aprilie 17, 2016, 14:51:59 » |
|
M[0][i-3] sau V[i-2] s-ar putea sa nu existe si accesezi zone din memorie intr-un mod relativ dubios (cel mai probabil intri peste alt vector si-l suprascrii).
|
|
|
Memorat
|
|
|
|
|