HELPPM - Giúp ngài thủ tướng!

Tác giả: skyvn97

Ngôn ngữ: C++

    #include<cstdio>
    #define MAX 505
    int a[MAX][MAX];
    int s[MAX][MAX];
    int k;
    int m,n;
    int	res;
    int tx,ty,bx,by;
    void init(void) {
    scanf("%d",&m);
    scanf("%d",&n);
    scanf("%d",&k);
    int i,j;
    for (i=0;i<=m;i=i+1) s[i][0]=0;
    for (i=0;i<=n;i=i+1) s[0][i]=0;
    for (i=1;i<=m;i=i+1)
    for (j=1;j<=n;j=j+1) {
    scanf("%d",&a[i][j]);
    s[i][j]=s[i][j-1]+s[i-1][j]-s[i-1][j-1]+a[i][j];
    }
    res=m*n+1;
    }
    void count(const int &b,const int &c) {
    int i,j;
    i=1;j=1;
    if (res<=c-b+1) return;
    if (s[c][n]-s[b-1][n]<k) return;
    while (true) {
    if (s[c][j]-s[c][i-1]-s[b-1][j]+s[b-1][i-1]>=k) {
    if (res>(c-b+1)*(j-i+1)) {
    res=(c-b+1)*(j-i+1);
    tx=b;ty=i;bx=c;by=j;
    }
    i++;
    }
    else {
    if (j>=n) break;
    else j++;
    }
    }
    }
    void process(void) {
    int i,j;
    for (i=1;i<=m;i=i+1)
    for (j=i;j<=m;j=j+1)
    count(i,j);
    if (res>m*n) printf("-1");
    else printf("%d\n%d %d %d %d",res,tx,ty,bx,by);
    }
    int main(void) {
    init();
    process();
    return 0;
    }

Download