답안 #1036137

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1036137 2024-07-27T03:50:37 Z vjudge1 Zemljište (COCI22_zemljiste) C++17
0 / 70
1 ms 344 KB
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

int main()
{
  ios::sync_with_stdio(false);
  cin.tie(0), cout.tie(0);
  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;
	  ll mi = 1e18, mx = -1e18;
	  st.insert({pref[x2][0] - pref[x1][0]});
	  if(pref[x2][0] - pref[x1][0] >= 0) mi = min(mi, pref[x2][0] - pref[x1][0]);
	  if(pref[x2][0] - pref[x1][0] <= 0) mx = min(mx, pref[x2][0] - pref[x1][0]);
	  
	  for(int y1 = 1; y1 <= m; y1++)
	    {
	      ll sm = pref[x1][y1] - pref[x2][y1];
	      // a <= b
	        while(st.size() > 1 && *st.begin() < a - sm) st.erase(st.begin());
	      // a <= fsm <= b // if I want this
	      if(sm < a || b < sm)
		{
		  auto it = st.begin();
		  ll fsm = *it + sm;
		  // cerr << fsm << endl;
		  ans = min(ans, abs(a - fsm) + abs(b - fsm));
		}
	      else
		{
		  // a <= sm <= b
		  ll fsm = mx + sm;
		  // cerr << fsm << endl;
		  ans = min(ans, abs(a - fsm) + abs(b - fsm));
		  fsm = mi + sm;
		  // cerr << fsm << endl;
		  ans = min(ans, abs(a - fsm) + abs(b - fsm));
		}
	    
	      st.insert({pref[x2][y1] - pref[x1][y1]});
	      
	  if(pref[x2][y1] - pref[x1][y1] >= 0) mi = min(mi, pref[x2][y1] - pref[x1][y1]);
	  if(pref[x2][y1] - pref[x1][y1] <= 0) mx = min(mx, pref[x2][y1] - pref[x1][y1]);

	    }
	}
    }
  // assert(ans != 1e18);
  cout << ans << endl;
  return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -