Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
2.0 kB
2
Indexable
Never
#include <bits/stdc++.h>

using namespace std;

ifstream fin("diamante.in");
ofstream fout("diamante.out");

long long int c, n, k, v[505][505], sum[1005], maxsum=-1, suma;

pair<int, int> idx[1025];

int sum_dp(int i, int j){
    if(i>n || j>n || i<1 || j<1) return 0;
    return v[i][j]+sum_dp(i+1, j+1);
}

int sum_ds(int i, int j){
    if(i>n || j>n || i<1 || j<1) return 0;
    return v[i][j]+sum_ds(i+1, j-1);
}

void zero_dp(int i, int j){
    if(i>n || j>n || i<1 || j<1) return;
    v[i][j]=0;
    zero_dp(i+1, j+1);
}

int cerinta1(){
    int q=0, in=1, sf=k;
    suma=0;
    for(int i=n; i>=1; i--){
        sum[++q]=sum_dp(i, 1);
        idx[q]={i, 1};
    }
    for(int j=2; j<=n; j++){
        sum[++q]=sum_dp(1, j);
        idx[q]={1, j};
    }
    
    for(int i=1; i<=k; i++){
        suma+=sum[i];
    }
    
    maxsum=suma;
    
    for(int i=k+1; i<=2*n-1; i++){
        suma=suma+sum[i]-sum[i-k];
        if(maxsum<suma){
            in=i-k+1, sf=i;
            maxsum=suma;
        }
        else if(maxsum==suma){
            
        }
    }
    
    for(int i=in; i<=sf; i++){
        zero_dp(idx[i].first, idx[i].second);
    }
    return maxsum;
}

int cerinta2(){
    int q=0;
    suma=0;
    for(int j=1; j<=n; j++){
        sum[++q]=sum_ds(1, j);
    }
    for(int i=2; i<=n; i++){
        sum[++q]=sum_ds(i, n);
    }
    
    for(int i=1; i<=k; i++){
        suma+=sum[i];
    }
    
    maxsum=suma;
    
    for(int i=k+1; i<=2*n-1; i++){
        suma=suma+sum[i]-sum[i-k];
        maxsum=max(maxsum, suma);
    }
    return maxsum;
}

int main(){
    
    fin>>c;
    fin>>n>>k;
    
    for(int i=1; i<=n; i++){
        for(int j=1; j<=n; j++){
            fin>>v[i][j];
        }
    }
    
    if(c==1){
        fout<<cerinta1();
    }
    
    if(c==2){
        fout<<cerinta2();
    }
    
    if(c==3){
        fout<<cerinta1()+cerinta2();
    }

    return 0;
}