|
Titlul: 004 Diagonale Scris de: Andrei Grigorean din Martie 05, 2012, 21:42:08 Aici puteţi discuta despre problema Diagonale (http://infoarena.ro/problema/diagonale).
Titlul: Răspuns: 004 Diagonale Scris de: Diana Lucaci din Martie 05, 2012, 22:49:11 unde pot gasi solutia? multumesc :)
Titlul: Răspuns: 004 Diagonale Scris de: Andrei Grigorean din 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).
Titlul: Răspuns: 004 Diagonale Scris de: Laurentiu Ion din Martie 05, 2012, 23:15:17 Diana, se vor posta solutiile de la concurs aici (http://"http://infoarena.ro/monthly-2012/runda-2/solutii"), 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 :ok:
Titlul: Răspuns: 004 Diagonale Scris de: Petrut Lucian din 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:)
Titlul: Răspuns: 004 Diagonale Scris de: Mihai Calancea din Martie 05, 2012, 23:31:45 http://infoarena.ro/monthly-2012/format
Titlul: Răspuns: 004 Diagonale Scris de: Laurentiu Ion din 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 :thumbup: Titlul: Răspuns: 004 Diagonale Scris de: Tudor Tiplea din 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!
Titlul: Răspuns: 004 Diagonale Scris de: Idomir Alin din 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.
Titlul: Răspuns: 004 Diagonale Scris de: Macarescu Sebastian din Martie 06, 2012, 19:06:17 @Idomir: Pai vezi ca nu e bine :P. 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 .
Titlul: Răspuns: 004 Diagonale Scris de: Tudor Tiplea din Martie 06, 2012, 19:44:22 @Idomir: Pai vezi ca nu e bine :P. 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. Titlul: Răspuns: 004 Diagonale Scris de: Macarescu Sebastian din Martie 06, 2012, 20:21:45 @Tiplea: Eu luam 0 cand initializam cu 10^9. Cand am schimbat cu 2^63 am luat 100 :P
Titlul: Răspuns: 004 Diagonale Scris de: Boaca Cosmin din Martie 06, 2012, 22:25:09 Eu am initializat cu -7-10^9 si am luat 100.
Titlul: Răspuns: 004 Diagonale Scris de: Florin eu din 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.. :roll:
Titlul: Răspuns: 004 Diagonale Scris de: George Marcus din Martie 08, 2012, 20:10:07 E bun orice numar mai mic sau egal cu -N * 109.
Titlul: Răspuns: 004 Diagonale Scris de: Laurentiu Ion din 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.. :roll: 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). Titlul: Răspuns: 004 Diagonale Scris de: Andrei Grigorean din Martie 09, 2012, 14:53:05 Puteti sa initializati maximul cu A[1][1] :)
Titlul: Răspuns: 004 Diagonale Scris de: Ionescu Marius din Martie 10, 2012, 20:39:19 Imi da incorect pe ultimul test ](*,)Stie cnv care ar putea fi problema ?
Titlul: Răspuns: 004 Diagonale Scris de: Gabriel Bitis din 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.
Titlul: Răspuns: 004 Diagonale Scris de: Ionescu Marius din 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 ? :-k
Titlul: Răspuns: 004 Diagonale Scris de: George Marcus din 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. Titlul: Răspuns: 004 Diagonale Scris de: Ionescu Marius din Martie 12, 2012, 09:32:51 Multumesc.Am luat 100 acum.
Titlul: Răspuns: 004 Diagonale Scris de: Cobzaru Adrian-Andrei din 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?
Cod: #include<fstream> Titlul: Răspuns: 004 Diagonale Scris de: George Marcus din Mai 21, 2012, 20:03:29 Nu cred ca e bine la "parelelele de dedesubtul diagonalei principale".
Titlul: Răspuns: 004 Diagonale Scris de: Cobzaru Adrian-Andrei din Mai 21, 2012, 21:27:47 Da, acolo era problema, si bineinteles, "greaseala de tipar" :D (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.
Titlul: Răspuns: 004 Diagonale Scris de: Cretu Bogdan din Iulie 19, 2013, 17:51:27 Ma puteti ajuta si pe mine? :D
Chiar nu inteleg ce are sursa mea ... pe toate testele iau incorect. Cod: #include <iostream> Titlul: Răspuns: 004 Diagonale Scris de: Mihai Calancea din Iulie 19, 2013, 18:18:14 Nu. Un set/o multime poate avea un singur element.
Titlul: Răspuns: 004 Diagonale Scris de: Cretu Bogdan din Iulie 19, 2013, 18:36:06 Mda...m-am lamurit :D
Mersi! :P Titlul: Răspuns: 004 Diagonale Scris de: Ispas Alexandru din Decembrie 05, 2013, 20:07:05 #include <stdio.h>
#define INPUT "diagonale.in" #define OUTPUT "diagonale.out" long long maxParaleleP (int n, long long a[1001][1001]){ //calculeaza suma maxima a liniilor paralele cu diagonala princpala int i,j,k; long long s,max=a[0][0]; for (k=0; k<n-1; k++){ s=0; for (i=0; i<n; i++) for (j=0; j<n; j++) if (i-j==k) s=s+a[j]; if (s>max) max=s; } return max; } long long maxParaleleS (int n, long long a[1001][1001]){ //calculeaza suma maxima a liniilor paralele cu diagonala secundara int i,j,k; int s,max=max=a[0][0]; for (k=(n-1)*2; 0<k; k--){ s=0; for (i=0; i<n; i++) for (j=0; j<n; j++) if (i+j==k) s=s+a[j]; if (s>max) max=s; } return max; } int main(){ int n; long long a[1001][1001]; freopen(INPUT,"r",stdin); freopen(OUTPUT,"w",stdout); scanf("%d",&n); for (int i=0; i<n; i++) for (int j=0; j<n; j++) scanf("%lld",&a[j]); if (maxParaleleP(n,a) > maxParaleleS(n,a)) printf("%lld",maxParaleleP(n,a)); else printf("%lld",maxParaleleS(n,a)); return 0; } de ce imi da stack overflow ? si cu [1000][1000] merge ? cum se face ca depasesc memoria si timpul si celelalte surse de le`am vazut nu depasesc ? Titlul: Răspuns: 004 Diagonale Scris de: Ispas Alexandru din Decembrie 05, 2013, 21:44:28 am rezolvat cu stack overflow dar memoria si timpul trece cu mult peste
Titlul: Răspuns: 004 Diagonale Scris de: George Marcus din Decembrie 05, 2013, 22:33:21 Algoritmul tau e O(N^3) fiindca gasesti prea ineficient diagonalele. Poate te ajuta articolul cu solutii: http://www.infoarena.ro/monthly-2012/runda-2/solutii.
Titlul: Răspuns: 004 Diagonale Scris de: Ispas Alexandru din Decembrie 06, 2013, 14:55:24 #include <stdio.h>
#define INPUT "diagonale.in" #define OUTPUT "diagonale.out" int main(){ int n,i,j; long long x; long long dp[2000], ds[2000]; long long maxp,maxs; freopen(INPUT,"r",stdin); freopen(OUTPUT,"w",stdout); scanf("%d",&n); for (i=0; i<2*n-1; i++){ dp=0; ds=0; } for (i=0; i<n; i++) for (j=0; j<n; j++){ scanf("%lld",&x); dp[n+i-j]=dp[n+i-j]+x; ds[i+j]=ds[i+j]+x; } maxp=-1000000000; maxs=-1000000000; for (i=0; i<2*n-1; i++){ if (dp>maxp) maxp=dp; if (ds>maxs) maxs=ds; } if (maxp>maxs) printf("%lld",maxp); else printf("%lld",maxs); } cum de iau incorect la ultimul test? Titlul: Răspuns: 004 Diagonale Scris de: George Marcus din Decembrie 06, 2013, 15:00:59 Gresesti la indici. Vezi ca in articol se lucreaza cu 1..n iar tu lucrezi cu 0..n-1. Si daca mai postezi cod, foloseste tagul code.
Titlul: Răspuns: 004 Diagonale Scris de: Ispas Alexandru din Decembrie 06, 2013, 16:14:48 imi cer scuze sunt nou pe site, dar nu vad care este problema cu indicii ca ii notez eu 0 n-1 ca ii notez 1 n pana la urma suma de pe diagonale tot aia e nu ?
Titlul: Răspuns: 004 Diagonale Scris de: Prehari Romica din Decembrie 06, 2013, 16:28:26 initializeaza maxp si maxs cu 12 zerouri, adica -1000000000000
Titlul: Răspuns: 004 Diagonale Scris de: George Marcus din Decembrie 06, 2013, 16:40:23 Nu e nevoie de -10^12, deoarece maximul va fi tot timpul cel putin -10^9.
Suma tot aceeasi e, dar trebuie sa iti adaptezi formulele. Daca ai indicii 0..n-1 atunci 0 <= i+j <= 2*n-2 si 1 <= n+i-j <= 2*n-1. Deci probabil trebuie sa pui doar un -1. Titlul: Răspuns: 004 Diagonale Scris de: Ispas Alexandru din Decembrie 06, 2013, 16:41:23 Cod: #include <stdio.h> am incercat si cu indicii si tot nu ia ultimu test :sad: Titlul: Răspuns: 004 Diagonale Scris de: Ispas Alexandru din Decembrie 06, 2013, 16:52:43 La indici era problema, am rezolvat, multumesc frumos !
Titlul: Răspuns: 004 Diagonale Scris de: Mihai Grebla din Ianuarie 09, 2017, 20:02:47 Poate pune cineva, va rog, niste fisiere de test?
|