Submission #1272182

#TimeUsernameProblemLanguageResultExecution timeMemory
1272182ttooppZemljište (COCI22_zemljiste)C++20
0 / 70
48 ms110492 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll r, s, a, b, maxi;
ll arr[103][103], ans=1e18;
ll horizontal[103][103], vertikal[103][103];
bool vis[103][103][103][103];

ll count(ll x){
    return abs(a-x)+abs(b-x);
}

void search(int x, int y, int i, int j, ll sum){
    //cout  <<x<<" "<<y<<" "<< i <<" "<<j<<endl;
    //cnt++;
    ans=min(ans,  abs(a-sum)+abs(b-sum));
    if(sum>maxi){
        ll one=sum-(horizontal[x][j]-horizontal[x][y-1]);
        if(x+1<=i && !vis[x+1][y][i][j])search(x+1, y, i, j, one);
        ll two=sum-(vertikal[i][y]-vertikal[x-1][y]);
        if(y+1<=j && ! vis[x][y+1][i][j])search(x, y+1, i, j, two);
        return;
    }
    if(i+1<=r){
        ll rep= sum+horizontal[i+1][j]-horizontal[i+1][y-1];
        if(!vis[x][y][i+1][j]){
            vis[x][y][i+1][j]=true;
            search(x, y, i+1, j, rep);
        }
    }
    if(j+1<=s){
        ll rep= sum+vertikal[i][j+1]-vertikal[x-1][j+1];
        if(!vis[x][y][i][j+1]){
            vis[x][y][i][j+1]=true;
            search(x, y, i, j+1, rep);
        }
    }
    return;
}

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    memset(vis, 0, sizeof(vis));
    cin >> r >> s >> a >> b;
    maxi=max(a, b);
    for(int i=1; i<=r; i++){
        for(int j=1; j<=s; j++){
            cin >> arr[i][j];
        }
    }

    for(int i=1; i<=r; i++){
        horizontal[i][0]=0;
        for(int j=1; j<=s; j++){
            horizontal[i][j]=horizontal[i][j-1]+arr[i][j];
        }
    }
    for(int j=1; j<=s; j++){
        vertikal[0][j]=0;
        for(int i=1; i<=r; i++){
            vertikal[i][j]=vertikal[i-1][j]+arr[i][j];
        }
    }
    search(1,1,1,1, arr[1][1]);
    cout <<ans<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...