Pagini: [1] 2   În jos
  Imprimă  
Ajutor Subiect: 004 Diagonale  (Citit de 36769 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« : 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 Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #1 : Martie 05, 2012, 22:49:11 »

unde pot gasi solutia?   multumesc Smile
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« 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
De-al casei
***

Karma: -41
Deconectat Deconectat

Mesaje: 102



Vezi Profilul
« 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  Ok
Memorat
luci94
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« 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
Echipa infoarena
Nu mai tace
*****

Karma: 733
Deconectat Deconectat

Mesaje: 1.216



Vezi Profilul
« Răspunde #5 : Martie 05, 2012, 23:31:45 »

http://infoarena.ro/monthly-2012/format
Memorat
laurion
De-al casei
***

Karma: -41
Deconectat Deconectat

Mesaje: 102



Vezi Profilul
« 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  Thumb up
Memorat
tzipleatud
De-al casei
***

Karma: 104
Deconectat Deconectat

Mesaje: 117



Vezi Profilul
« 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 Deconectat

Mesaje: 15



Vezi Profilul
« 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
Vorbaret
****

Karma: 12
Deconectat Deconectat

Mesaje: 183



Vezi Profilul
« Răspunde #9 : Martie 06, 2012, 19:06:17 »

@Idomir: Pai vezi ca nu e bine  Tongue. 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
De-al casei
***

Karma: 104
Deconectat Deconectat

Mesaje: 117



Vezi Profilul
« Răspunde #10 : Martie 06, 2012, 19:44:22 »

@Idomir: Pai vezi ca nu e bine  Tongue. 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
Vorbaret
****

Karma: 12
Deconectat Deconectat

Mesaje: 183



Vezi Profilul
« 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  Tongue
Memorat
darkseeker
De-al casei
***

Karma: 29
Deconectat Deconectat

Mesaje: 106



Vezi Profilul
« 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 Deconectat

Mesaje: 8



Vezi Profilul
« 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.. Rolling Eyes
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 719



Vezi Profilul
« Răspunde #14 : Martie 08, 2012, 20:10:07 »

E bun orice numar mai mic sau egal cu -N * 109.
Memorat
laurion
De-al casei
***

Karma: -41
Deconectat Deconectat

Mesaje: 102



Vezi Profilul
« 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.. Rolling Eyes


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
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #16 : Martie 09, 2012, 14:53:05 »

Puteti sa initializati maximul cu A[1][1] Smile
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
marius23
Strain


Karma: -3
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« Răspunde #17 : Martie 10, 2012, 20:39:19 »

Imi da incorect pe ultimul test ](*,)Stie cnv care ar putea fi problema ?
Memorat
gabitzish1
Moderatori infoarena
Nu mai tace
*****

Karma: 321
Deconectat Deconectat

Mesaje: 926



Vezi Profilul
« 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 Deconectat

Mesaje: 4



Vezi Profilul
« 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 ?  Think
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 719



Vezi Profilul
« 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 Deconectat

Mesaje: 4



Vezi Profilul
« Răspunde #21 : Martie 12, 2012, 09:32:51 »

Multumesc.Am luat 100 acum.
Memorat
Andrei.Xwe
Strain
*

Karma: -4
Deconectat Deconectat

Mesaje: 38



Vezi Profilul
« 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?

Cod:
#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
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 719



Vezi Profilul
« 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 Deconectat

Mesaje: 38



Vezi Profilul
« Răspunde #24 : Mai 21, 2012, 21:27:47 »

Da, acolo era problema, si bineinteles, "greaseala de tipar"  Very Happy (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
Pagini: [1] 2   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines