Submission #1272066

#TimeUsernameProblemLanguageResultExecution timeMemory
1272066burnthememoryZemljište (COCI22_zemljiste)C++20
70 / 70
559 ms4596 KiB

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define pb push_back
#define mp make_pair
#define fi first
#define se second
 
const ll N = 500+10;
vector<pair<ll,ll>> seg(4*N);
vector<vector<ll>> grid(N, vector<ll>(N)), pref(N, vector<ll>(N));

void solve() {
    ll n, m; cin >> n >> m;
    ll a, b; cin >> a >> b;
    
    ll target = (a+b)/2;
    
    for(int i = 0; i < n; i++){
	    for(int j = 0; j < m; j++){
	    	cin >> grid[i+1][j+1];
	    	pref[i+1][j+1] = pref[i+1][j] + grid[i+1][j+1];
		}
	}
    
    
    ll ans = 1e17;
    for(int el = 1; el <= m; el++){
	    for(int er = el; er <= m; er++){
	    	vector<ll> val; val.pb(0);
			for(int line = 1; line <= n; line ++){
	    		val.pb(pref[line][er] - pref[line][el-1]);
			}
			
//			cout << el << " " << er << endl;
//			
//			for(auto v : val){
//				cout << v << " ";
//			}
//			cout << endl;
			
//			
			ll r = 0, sum = val[0];
			for(ll l = 1; l <= n; l ++){
				r = max(r, l);
				if(r==l) sum = val[l];
//				cout << "   " << l << " " << r << " " << sum << endl;
				while(r < n && sum + val[r+1] <= target){
//					cout << " --> " << sum << " " << val[r+1] << endl;
					sum += val[r+1]; r++;
//					cout << "   " <<  l << " " << r << " " << sum << endl;
				}
//				cout << endl;
				ans = min(ans, abs(a-sum)+abs(b-sum) ) ;
		
				if(r < n){
					ans = min(ans, abs(a-(sum+val[r+1]))+abs(b-(sum+val[r+1]) ));
				}
//				cout << " :: " << l << " " << r << " " << sum <<   endl;
				sum -= val[l];
			}
			
			
		}
	}
	
	cout  << ans << endl;
	
}

int main(){
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  ll t=1; 
//  cin >> t;
  while(t--) solve();
}

//
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...