•wefgef
|
 |
« : Martie 05, 2012, 21:42:08 » |
|
Aici puteţi discuta despre problema Diagonale.
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•Dianna22
Strain
Karma: -1
Deconectat
Mesaje: 2
|
 |
« Răspunde #1 : Martie 05, 2012, 22:49:11 » |
|
unde pot gasi solutia? multumesc 
|
|
|
Memorat
|
|
|
|
•wefgef
|
 |
« Răspunde #2 : Martie 05, 2012, 23:15:03 » |
|
Calculezi suma pe fiecare diagonala si afisezi maximul? Ai grija cum initializezi variabila in care retii maximul pentru ca e posibil ca raspunsul sa fie negativ. Deasemnea, ai grija sa folosesti variabile pe 64 de biti (long long).
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•laurion
|
 |
« Răspunde #3 : Martie 05, 2012, 23:15:17 » |
|
Diana, se vor posta solutiile de la concurs aici, desi nu era problema de idee, ci doar trebuia sa parcurgi matricea si sa tii maximul pentru fiecare diagonala (eu am facut separat pentru cele || cu cea principala si pentru cele || cu cea secundara). Pentru fiecare element, aduni ce e in stanga sus pentru diagonalele asa "\" si ce e in dreapta sus pentru diagonalele asa "/". Ai grija sa lucrezi pe long long 
|
|
|
Memorat
|
|
|
|
•luci94
Strain
Karma: 0
Deconectat
Mesaje: 2
|
 |
« Răspunde #4 : Martie 05, 2012, 23:28:40 » |
|
Cum puteai face sa se incadreze in 1000 de linii si coloane + variabile longint daca rezolvai in pascal ? Pt ca imi aparea stack overflow daca puneam valori asa mari. Inca un lucru : m-am uitat si in regulament si n-am gasit de unde vin defapt punctele de penalizare:)
|
|
|
Memorat
|
|
|
|
•klamathix
|
 |
« Răspunde #5 : Martie 05, 2012, 23:31:45 » |
|
|
|
|
Memorat
|
|
|
|
•laurion
|
 |
« Răspunde #6 : Martie 06, 2012, 01:21:14 » |
|
Cum puteai face sa se incadreze in 1000 de linii si coloane + variabile longint daca rezolvai in pascal ? Pt ca imi aparea stack overflow daca puneam valori asa mari. Inca un lucru : m-am uitat si in regulament si n-am gasit de unde vin defapt punctele de penalizare:)
Nu-s bun la Pascal (personal te sfatuiesc sa treci mai departe) dar daca primesti stack overflow si crezi ca e de la declararea matricei (apropo, matricea din input poate fi int) atunci probabil ca declari in interiorul functiei, declara global 
|
|
|
Memorat
|
|
|
|
•tzipleatud
|
 |
« Răspunde #7 : Martie 06, 2012, 14:55:18 » |
|
Nu ai nevoie de matrice, poti citi cu doar o variabila pe care o aduni la suma corespunzatoare diagonalei pe care se afla. (aceste sume le retii in 2 vectori). Bafta!
|
|
|
Memorat
|
|
|
|
•idomiralin
Strain
Karma: 0
Deconectat
Mesaje: 15
|
 |
« Răspunde #8 : Martie 06, 2012, 18:42:28 » |
|
Am avut grija la cazuri, am initializat variabilele cu long long, am initializat maximul cu - 10^9 si nu stiu unde gresesc, pentru ca iau incorrect la ultimul test. Poate ma poate ajuta cineva.
|
|
|
Memorat
|
|
|
|
•andunhill
|
 |
« Răspunde #9 : Martie 06, 2012, 19:06:17 » |
|
@Idomir: Pai vezi ca nu e bine  . Ai pe o diagonala maxim N elemente care sunt in modul mai mici decat 10^9; Cand faci suma lor obtii un maxim de 1000 * 10^9. Deci initializeaza maximul cu -2^63 .
|
|
|
Memorat
|
|
|
|
•tzipleatud
|
 |
« Răspunde #10 : Martie 06, 2012, 19:44:22 » |
|
@Idomir: Pai vezi ca nu e bine  . Ai pe o diagonala maxim N elemente care sunt in modul mai mici decat 10^9; Cand faci suma lor obtii un maxim de 1000 * 10^9. Deci initializeaza maximul cu -2^63 . Nu e neaparat ca asta sa fie problema deoarece elementele din colturi sunt mai mari decat -10^9. Eu am luat 100 chiar si cu maximul initializat cu -9.99999999*10^8.
|
|
|
Memorat
|
|
|
|
•andunhill
|
 |
« Răspunde #11 : Martie 06, 2012, 20:21:45 » |
|
@Tiplea: Eu luam 0 cand initializam cu 10^9. Cand am schimbat cu 2^63 am luat 100 
|
|
|
Memorat
|
|
|
|
•darkseeker
|
 |
« Răspunde #12 : Martie 06, 2012, 22:25:09 » |
|
Eu am initializat cu -7-10^9 si am luat 100.
|
|
|
Memorat
|
|
|
|
•noobakaflo
Strain
Karma: 1
Deconectat
Mesaje: 8
|
 |
« Răspunde #13 : Martie 08, 2012, 19:11:06 » |
|
^^Cum faceti initializarile cu valorile astea mari ? 2^63 ?Vad ca nu intra in long double,are mai mult de 18 cifre.. 
|
|
|
Memorat
|
|
|
|
•PlayLikeNeverB4
|
 |
« Răspunde #14 : Martie 08, 2012, 20:10:07 » |
|
E bun orice numar mai mic sau egal cu -N * 109.
|
|
|
Memorat
|
|
|
|
•laurion
|
 |
« Răspunde #15 : Martie 08, 2012, 20:35:11 » |
|
^^Cum faceti initializarile cu valorile astea mari ? 2^63 ?Vad ca nu intra in long double,are mai mult de 18 cifre..  Trebuie sa folosesti long long, nu double... este pe 64 de biti deci maximul este 2^63 - 1 (ultimul bit este pentru semn, daca nu folosesti unsigned long long). De asemenea, ai grija cand initializezi, sa folosesti 1LL, nu doar 1 (constantele by default sunt int).
|
|
|
Memorat
|
|
|
|
•wefgef
|
 |
« Răspunde #16 : Martie 09, 2012, 14:53:05 » |
|
Puteti sa initializati maximul cu A[1][1] 
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•marius23
Strain
Karma: -3
Deconectat
Mesaje: 4
|
 |
« Răspunde #17 : Martie 10, 2012, 20:39:19 » |
|
Imi da incorect pe ultimul test ](*,)Stie cnv care ar putea fi problema ?
|
|
|
Memorat
|
|
|
|
•gabitzish1
|
 |
« Răspunde #18 : Martie 10, 2012, 23:49:11 » |
|
S-ar putea sa nu iei in considerare suma maxima negativa, sau sa nu initializezi maximul cu o valoare corecta.
|
|
|
Memorat
|
|
|
|
•marius23
Strain
Karma: -3
Deconectat
Mesaje: 4
|
 |
« Răspunde #19 : Martie 11, 2012, 09:10:48 » |
|
Am initializat si cu -2^63 si -10^9 si am obtinut acelas rezultat.La ce te referi prin suma maxima negativa ? 
|
|
|
Memorat
|
|
|
|
•PlayLikeNeverB4
|
 |
« Răspunde #20 : Martie 11, 2012, 14:10:28 » |
|
Adica toata matricea e formata din numere negative.
Ok, m-am uitat la sursa ta. Noi cand scriem 10^9 sau 2^63 ne referim la operatia de ridicare la putere, pe cand daca tu scrii aia intr-un program C, el va face operatia XOR pe biti. Deci in loc sa scrii -10^9 poti scrie explicit -1000000000.
|
|
|
Memorat
|
|
|
|
•marius23
Strain
Karma: -3
Deconectat
Mesaje: 4
|
 |
« Răspunde #21 : Martie 12, 2012, 09:32:51 » |
|
Multumesc.Am luat 100 acum.
|
|
|
Memorat
|
|
|
|
•Andrei.Xwe
Strain
Karma: -4
Deconectat
Mesaje: 38
|
 |
« Răspunde #22 : Mai 21, 2012, 19:16:41 » |
|
Eu pic vreo 4 teste din cauza ca e gresit, dar eu am verificat si programul imi calculeaza corect sumele.Ma puteti ajuta? #include<fstream> using namespace std; #include<values.h> long long a[1001][1001]; int main() { ifstream fcin("diagonale.in"); ofstream fcout("diagonale.out"); int i,j,n; long long s,max=-LONG_LONG_MAX; fcin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) fcin>>a[i][j]; //diagonala principala s=0; for(i=1;i<=n;i++) s+=a[i][i]; if(s>max) max=s; //parelelele de deasupra diagonalei principale for(i=2;i<=n;i++) { s=0; for(j=i;j<=n;j++) s+=a[j-i+1][j]; if(s>max) max=s; } //parelelele de dedesubtul diagonalei principale for(i=2;i<=n;i++) { s=0; for(j=2;j<=n;j++) s+=a[j][j-i+1]; if(s>max) max=s; } //diagonala secundara s=0; for(i=1;i<=n;i++) s+=a[i][n-i+1]; if(s>max) max=s; //parelelele de deasupra diagonalei secundare for(i=1;i<n;i++) { s=0; for(j=1;j<=i;j++) s+=a[j][i-j+1]; if(s>max) max=s; } //paralelele de deasubtul diagonalei secundare for(i=2;i<=n;i++) { s=0; for(j=i;j<=n;j++) s+=a[j][n-j+i]; if(s>max) max=s; } fcout<<max; return 0; }
|
|
|
Memorat
|
|
|
|
•PlayLikeNeverB4
|
 |
« Răspunde #23 : Mai 21, 2012, 20:03:29 » |
|
Nu cred ca e bine la "parelelele de dedesubtul diagonalei principale".
|
|
|
Memorat
|
|
|
|
•Andrei.Xwe
Strain
Karma: -4
Deconectat
Mesaje: 38
|
 |
« Răspunde #24 : Mai 21, 2012, 21:27:47 » |
|
Da, acolo era problema, si bineinteles, "greaseala de tipar"  (pusesem intr-un for j=2 in loc de j=i...i care la inceput avea valoarea 2 si probabil de aia). Oricum, multumesc pentru ajutor.
|
|
|
Memorat
|
|
|
|
|