Afişează mesaje
|
|
Pagini: [1]
|
|
3
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva Infoarena Monthly / Răspuns: 004 Diagonale
|
: Decembrie 06, 2013, 16:41:23
|
#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=1; i<=2*n-1; i++){ dp[i]=0; ds[i]=0; } for (i=1; i<=n; i++) for (j=1; 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=1; i<=2*n-1; i++){ if (dp[i]>maxp) maxp=dp[i]; if (ds[i]>maxs) maxs=ds[i]; } if (maxp>maxs) printf("%lld",maxp); else printf("%lld",maxs); } am incercat si cu indicii si tot nu ia ultimu test 
|
|
|
|
|
5
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva Infoarena Monthly / Răspuns: 004 Diagonale
|
: 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?
|
|
|
|
|
7
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva Infoarena Monthly / Răspuns: 004 Diagonale
|
: 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 ?
|
|
|
|
|