Cod sursa(job #636790)

Utilizator cosminx2003Cosmin Clapon cosminx2003 Data 19 noiembrie 2011 23:47:05
Problema Ferma2 Scor 10
Compilator cpp Status done
Runda .com 2011 Marime 1.04 kb
#include <fstream>
#define N 1001

using namespace std;
ifstream f("ferma2.in");
ofstream g("ferma2.out");

int main() {
	int A[N][N],x[N]={0},y[N]={0},z[N]={0},n,k,i,j,p=0,a,b,c;
	
	f>>n>>k;
	for(i=1;i<=n;i++) {
		for(j=1;j<=i;j++) {
			f>>A[i][j];
		}
	}
	
	for(i=n;i>=n-k+1;i--) {
		for(j=n-i+1;j<=n;j++) {
		 	x[n-i+1]+=A[j][n-i+1];
		}
		for(j=1;j<=i;j++) {
			y[n-i+1]+=A[i][j];
		}
		for(j=1;j<=i;j++) {
			z[n-i+1]+=A[j+n-i][j];
		}
	}

	a=b=c=1;
	for(i=1;i<=k;i++) {
		if(x[a] > y[b] && x[a] > z[c]) {
			p+=x[a];
			x[a]=0;
			for(j=b;j<=k;j++) {
				y[j]-=A[n-j+1][a];
			}
			for(j=c;j<=k;j++) {
				z[j]-=A[j][a];
			}
			a++;
		} else {
			if(y[b] > x[a] && y[b] > z[c]) {
			p+=y[b];
			y[b]=0;
			for(j=a;j<=k;j++) {
				x[j]-=A[n-b+1][j];
			}
			for(j=c;j<=k;j++) {
				z[j]-=A[n-b+1][n-j+1];
			}
			b++;
			} else {
				if(z[c] > x[a] && z[c] > y[b]) {
					p+=z[c];
					z[c]=0;
					for(j=a;j<=k;j++) {
						x[j]-=A[j+b-1][j];
					}
					for(j=b;j<=k;j++) {
						y[j]-=A[n-j+b][n-j+1];
					}
					c++;
				}
			}
		}
	}
	g<<p;
	return 0;
}