Pagini recente » Cod sursa (job #1372425) | Cod sursa (job #1776819) | Cod sursa (job #2795840) | Diferente pentru teorema-chineza-a-resturilor intre reviziile 45 si 89 | Cod sursa (job #201285)
Cod sursa(job #201285)
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int **a;
int N, M, X;
ifstream f;
f.open ("teren.in");
f >> N;
f >> M;
f >> X;
a = new int*[N];
for (int i = 0 ;i < N; i++)
a[i] = new int[M];
for (int i = 0 ; i < N; i++)
for ( int j = 0 ; j < M ; j++)
f >> a[i][j];
f.close();
int *sum = new int[N];
for (int i = 0 ; i < N ; i++)
sum[i] = 0;
int sumMax = 0;
for (int i = 0 ; i < M ; i++)
{
for ( int j = i ; j < M ; j++)
{
for (int k = 0 ; k < N ; k++)
sum[k] += a[k][j];
int posStart = 0;
int posEnd = 0;
int sumPart = sum[0];
while (posEnd < N)
{
if (sumPart <= X)
{
if ((j-i+1)*(posEnd-posStart + 1) > sumMax)
sumMax = (j-i+1)*(posEnd-posStart + 1);
posEnd++;
sumPart += sum[posEnd];
} else
{
posStart++;
sumPart -= sum[posStart];
}
if ((j-i+1)*(N-posStart + 1) < sumMax)
break;
}
}
for (int i = 0 ; i < N ; i++)
sum[i] = 0;
}
//output
ofstream out;
out.open ("teren.out");
cout << sumMax;
out.close();
return 0;
}