Pagini recente » Cod sursa (job #2479990) | Cod sursa (job #2961953) | Cod sursa (job #1302617) | Cod sursa (job #1095843) | Cod sursa (job #1572037)
#include<cstdio>
using namespace std;
const int nMax = 153;
int mat[nMax * 2][nMax * 2], dq[nMax * 2];
long long sumPart[nMax * 2];
int n, m, r, q, st, dr;
bool verif(int x){
int i, j, p, k, s;
for(i = 1 ; i <= 2 * n ; ++i){
for(j = 1 ; j <= 2 * m ; ++j){
sumPart[j] = 0;
}
for(j = i ; j <= 2 * n && j < i + n ; ++j){
for(p = 1, s = 0; p <= 2 * m ; ++p){
s += (mat[j][p] - x);
sumPart[p] += s;
}
if(j >= i + r - 1){
st = 1; dr = 0;
for(p = q, k = 0; p <= 2 * m ; ++p, ++k){
while(st <= dr && sumPart[dq[dr]] >= sumPart[k])
--dr;
dq[++dr] = k;
if(st <= dr && dq[st] < p - n)
++st;
if(sumPart[p] - sumPart[dq[st]] >= 0)
return 1;
}
}
}
}
return 0;
}
int main (){
FILE *in = fopen("balans.in","r");
FILE *out = fopen("balans.out","w");
fscanf(in,"%d%d%d%d", &n, &m, &r, &q);
int i, j;
for(i = 1 ; i <= n ; ++i){
for(j = 1 ; j <= m ; ++j){
fscanf(in,"%d", &mat[i][j]);
mat[i][j] *= 1000;
mat[i + n][j] = mat[i][j];
mat[i][j + m] = mat[i][j];
mat[i + n][j + m] = mat[i][j];
}
}
int pas, rez = 0;
for(pas = 1 << 20 ; pas ; pas >>= 1){
if(verif(rez + pas))
rez += pas;
}
fprintf(out,"%.3lf\n", (double)rez / 1000);
return 0;
}