Cod sursa(job #1293604)
Utilizator | Data | 16 decembrie 2014 09:24:21 | |
---|---|---|---|
Problema | Teren | Scor | 40 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.23 kb |
#include <stdio.h>
bool b[301][301];
int a[301][301];
int c[301][301];
int n,m,x;
int main()
{
FILE *fin,*fout;
fin=fopen("teren.in","r");
fout=fopen("teren.out","w");
fscanf(fin,"%d %d %d",&n,&m,&x);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++) fscanf(fin,"%d",&b[i][j]);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
a[i][j]=b[i][j]+a[i][j-1];
}
}
int count=0,sum=0,max=0,xcor;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]<=x)
{
xcor=i+1;
count=a[i][j];
sum=j;
while(a[xcor][j]+count<=x&&xcor<=n)
{
count+=a[xcor][j];
sum+=j;
xcor++;
}
if(max<sum) max=sum;
}
}
}
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
c[j][i]=b[j][i]+c[j-1][i];
}
}
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
if(a[j][i]<=x)
{
xcor=j+1;
count=a[j][i];
sum=i;
while(a[xcor][i]+count<=x&&xcor<=n)
{
count+=a[xcor][i];
sum+=i;
xcor++;
}
if(max<sum) max=sum;
}
}
}
fprintf(fout,"%d",max);
fclose(fin);
fclose(fout);
return 0;
}