Submission #1036083

# Submission time Handle Problem Language Result Execution time Memory
1036083 2024-07-27T03:28:28 Z vjudge1 Zemljište (COCI22_zemljiste) C++17
0 / 70
0 ms 344 KB
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

int main()
{
  ll n, m, a, b;
  cin >> n >> m >> a >> b;
  if(a > b) swap(a, b);
  ll c[n][m];
  for(int i = 0; i < n; i ++)
    for(int j = 0; j < m; j ++)
      cin >> c[i][j];

  ll ans = 1e18;
  ll pref[n + 1][m + 1];
  for(int i = 0; i <= n; i ++)
    for(int j = 0; j <= m; j ++)
      pref[i][j] = 0;

  for(int i = 0; i < n; i ++)
    for(int j = 0; j < m; j ++)
      pref[i + 1][j + 1] = pref[i][j + 1] + pref[i + 1][j] - pref[i][j] + c[i][j];

  for(int x1 = 1; x1 <= n; x1++)
    {
      for(int x2 = 0; x2 < x1; x2++)
	{
	  set<ll> st;
	  st.insert({pref[x2][0] - pref[x1][0]});
	  for(int y1 = 1; y1 <= m; y1++)
	    {
	      ll sm = pref[x1][y1] - pref[x2][y1];
	      // a <= b

	      // a <= fsm <= b // if I want this
	      if(sm < a || sm > b)
		{
		  auto it = st.upper_bound(a - sm - 1);
		  if(it == st.end()) it--;
		  ll fsm = *it + sm;
		  ans = min(ans, abs(a - fsm) + abs(b - fsm));
		}
	      else
		{
		  // a <= sm <= b
		  auto it = st.upper_bound(-1);
		  if(it != st.end())
		    {
		      ll fsm = *it + sm;
		      ans = min(ans, abs(a - fsm) + abs(b - fsm));
		    }
		  
		  if(it != st.begin())
		    {
		      it--;
		      ll fsm = *it + sm;
		      ans = min(ans, abs(a - fsm) + abs(b - fsm));
		    }  
		}
			      
	      st.insert({pref[x2][y1] - pref[x1][y1]});
	    }
	}
    }
  assert(ans != 1e18);
  cout << ans << endl;
  return 0;
}
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -