답안 #1114029

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1114029 2024-11-18T06:33:09 Z Dan4Life The Kingdom of JOIOI (JOI17_joioi) C++17
60 / 100
4000 ms 79224 KB
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define sz(a) (int)a.size()
#define all(a) begin(a),end(a)
const int N = (int)2e3+10;
int n, m, lst[N];
int dp[N][N], pref[N][N];
int a[N][N], b[N][N], c[N][N];

void Rotate(){
	for(int i = 0; i < n; i++)
		for(int j = 0; j < m; j++)
			c[i][j] = b[i][j];
	for(int i = 0; i < n; i++)
		for(int j = 0; j < m; j++)
			b[j][i] = c[i][m-j-1];
	swap(n,m);
}

bool calc(){
	for(int k : {0,1}){
		memset(dp,0,sizeof(dp));
		memset(pref,0,sizeof(pref));
		memset(lst,0,sizeof(lst));
		for(int i = 0; i < n; i++){
			for(int j = 0; j < m; j++){
				pref[i][j+1] = pref[i][j]+(!b[i][j] or b[i][j]==k);
				if(b[i][j]==k) lst[i]=j+1;
			}
		}
		for(int i = 0; i < n; i++){
			for(int j = lst[i]; j <= m; j++){
				if(pref[i][j]!=j) break;
				if(!i) dp[i][j]=(j!=m);
				else{
					for(int k = lst[i-1]; k <= j; k++) 
						dp[i][j]|=dp[i-1][k];
				}
			}
		}
		bool ok = 0;
		for(int i = 1; i <= m; i++) ok|=dp[n-1][i];
		if(ok) return 1;
	}
	return 0;
}

int mn = (int)1e9, mx = 0;
bool chk(int R){
	memset(b,0,sizeof(b));
	for(int i = 0; i < n; i++){
		for(int j = 0; j < m; j++){
			if(a[i][j]>mn+R) b[i][j]=2;
			if(a[i][j]<mx-R){
				if(b[i][j]==2) return 0;
				b[i][j] = 1;
			}
		}
	}
	bool ok = 0;
	for(int i = 0; i < 4; i++) 
		ok|=calc(), Rotate();
	return ok;
}

int main(){
	cin >> n >> m;
	for(int i = 0; i < n; i++)
		for(int j = 0; j < m; j++)
			cin >> a[i][j],mn=min(mn,a[i][j]),mx=max(mx,a[i][j]);
	int l = 0, r = (int)1e9;
	while(l<r){
		int mid = (l+r)/2;
		if(chk(mid)) r=mid;
		else l=mid+1;
	}
	cout << l << "\n";
}
# 결과 실행 시간 메모리 Grader output
1 Correct 297 ms 50608 KB Output is correct
2 Correct 322 ms 50512 KB Output is correct
3 Correct 316 ms 50512 KB Output is correct
4 Correct 167 ms 50512 KB Output is correct
5 Correct 325 ms 50512 KB Output is correct
6 Correct 208 ms 50660 KB Output is correct
7 Correct 349 ms 50760 KB Output is correct
8 Correct 347 ms 50512 KB Output is correct
9 Correct 327 ms 50564 KB Output is correct
10 Correct 352 ms 50564 KB Output is correct
11 Correct 328 ms 50572 KB Output is correct
12 Correct 339 ms 50512 KB Output is correct
13 Correct 323 ms 50536 KB Output is correct
14 Correct 322 ms 50512 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 297 ms 50608 KB Output is correct
2 Correct 322 ms 50512 KB Output is correct
3 Correct 316 ms 50512 KB Output is correct
4 Correct 167 ms 50512 KB Output is correct
5 Correct 325 ms 50512 KB Output is correct
6 Correct 208 ms 50660 KB Output is correct
7 Correct 349 ms 50760 KB Output is correct
8 Correct 347 ms 50512 KB Output is correct
9 Correct 327 ms 50564 KB Output is correct
10 Correct 352 ms 50564 KB Output is correct
11 Correct 328 ms 50572 KB Output is correct
12 Correct 339 ms 50512 KB Output is correct
13 Correct 323 ms 50536 KB Output is correct
14 Correct 322 ms 50512 KB Output is correct
15 Correct 345 ms 51280 KB Output is correct
16 Correct 608 ms 53332 KB Output is correct
17 Correct 646 ms 53576 KB Output is correct
18 Correct 361 ms 53540 KB Output is correct
19 Correct 452 ms 53328 KB Output is correct
20 Correct 438 ms 51536 KB Output is correct
21 Correct 528 ms 53320 KB Output is correct
22 Correct 161 ms 53592 KB Output is correct
23 Correct 386 ms 53536 KB Output is correct
24 Correct 194 ms 51540 KB Output is correct
25 Correct 392 ms 53844 KB Output is correct
26 Correct 445 ms 53576 KB Output is correct
27 Correct 557 ms 53584 KB Output is correct
28 Correct 550 ms 53592 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 297 ms 50608 KB Output is correct
2 Correct 322 ms 50512 KB Output is correct
3 Correct 316 ms 50512 KB Output is correct
4 Correct 167 ms 50512 KB Output is correct
5 Correct 325 ms 50512 KB Output is correct
6 Correct 208 ms 50660 KB Output is correct
7 Correct 349 ms 50760 KB Output is correct
8 Correct 347 ms 50512 KB Output is correct
9 Correct 327 ms 50564 KB Output is correct
10 Correct 352 ms 50564 KB Output is correct
11 Correct 328 ms 50572 KB Output is correct
12 Correct 339 ms 50512 KB Output is correct
13 Correct 323 ms 50536 KB Output is correct
14 Correct 322 ms 50512 KB Output is correct
15 Correct 345 ms 51280 KB Output is correct
16 Correct 608 ms 53332 KB Output is correct
17 Correct 646 ms 53576 KB Output is correct
18 Correct 361 ms 53540 KB Output is correct
19 Correct 452 ms 53328 KB Output is correct
20 Correct 438 ms 51536 KB Output is correct
21 Correct 528 ms 53320 KB Output is correct
22 Correct 161 ms 53592 KB Output is correct
23 Correct 386 ms 53536 KB Output is correct
24 Correct 194 ms 51540 KB Output is correct
25 Correct 392 ms 53844 KB Output is correct
26 Correct 445 ms 53576 KB Output is correct
27 Correct 557 ms 53584 KB Output is correct
28 Correct 550 ms 53592 KB Output is correct
29 Execution timed out 4050 ms 79224 KB Time limit exceeded
30 Halted 0 ms 0 KB -