답안 #59809

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
59809 2018-07-23T07:03:47 Z 김세빈(#1725) Cultivation (JOI17_cultivation) C++11
0 / 100
4 ms 760 KB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair <ll, ll> pll;

pll P[333];
ll K[666][666], L[333], R[333];
ll n, h, w, ans = 1e18;

ll check(ll l, ll r)
{
	ll x, y, d, i, j, s, e, t, prev;
	
	vector <ll> X, Y;
	
	for(i=1; i<=n; i++){
		x = P[i].first - l;
		X.push_back(x);
		x = P[i].first + r + 1;
		X.push_back(x);
		Y.push_back(P[i].second);
	}
	
	X.push_back(1); Y.push_back(1);
	X.push_back(h); Y.push_back(w);
	
	sort(X.begin(), X.end());
	X.erase(unique(X.begin(), X.end()), X.end());
	
	sort(Y.begin(), Y.end());
	Y.erase(unique(Y.begin(), Y.end()), Y.end());
	
	for(i=1; i<=n; i++){
		s = lower_bound(X.begin(), X.end(), P[i].first - l) - X.begin() + 1;
		e = lower_bound(X.begin(), X.end(), P[i].first + r + 1) - X.begin() + 1;
		y = lower_bound(Y.begin(), Y.end(), P[i].second) - Y.begin() + 1;
		for(j=s; j<e; j++) K[j][y] = i;
	}
	
	s = lower_bound(X.begin(), X.end(), 1) - X.begin() + 1;
	e = lower_bound(X.begin(), X.end(), h) - X.begin() + 1;
	
	x = y = d = 0;
	
	for(i=s; i<=e; i++){
		prev = -1;
		for(j=1; j<=Y.size(); j++){
			if(K[i][j]){
				t = K[i][j];
				if(prev == -1) x = max(x, P[t].second - 1);
				else d = max(d, P[t].second - P[prev].second - 1);
				prev = t;
			}
		}
		if(prev == -1) return 1e18;
		y = max(y, w - P[prev].second);
	}
	
	for(i=1; i<=X.size(); i++){
		for(j=1; j<=Y.size(); j++){
			K[i][j] = 0;
		}
	}
	
	return x + y + max(0ll, d - x - y);
}

int main()
{
	ll i, j, k;
	
	
	scanf("%lld%lld%lld", &h, &w, &n);
	for(i=1; i<=n; i++){
		scanf("%lld%lld", &P[i].first, &P[i].second);
	}
	
	sort(P + 1, P + n + 1);
	
	for(i=1; i<=n; i++){
		L[i] = P[i].first - 1;
		for(j=1; j<i; j++){
			if(P[j].second == P[i].second) L[i] = P[i].first - P[j].first - 1;
		}
		
		R[i] = h - P[i].first;
		for(j=n; j>i; j--){
			if(P[j].second == P[i].second) R[i] = P[j].first - P[i].first - 1;
		}
	}
	
	for(i=1; i<=n; i++){
		for(j=1; j<=n; j++){
			k = check(L[i], R[i]) + L[i] + R[i];
			ans = min(ans, k);
		}
	}
	
	printf("%lld\n", ans);
	
	return 0;
}

Compilation message

cultivation.cpp: In function 'll check(ll, ll)':
cultivation.cpp:49:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(j=1; j<=Y.size(); j++){
            ~^~~~~~~~~~
cultivation.cpp:61:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(i=1; i<=X.size(); i++){
           ~^~~~~~~~~~
cultivation.cpp:62:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(j=1; j<=Y.size(); j++){
            ~^~~~~~~~~~
cultivation.cpp: In function 'int main()':
cultivation.cpp:75:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%lld%lld%lld", &h, &w, &n);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
cultivation.cpp:77:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld%lld", &P[i].first, &P[i].second);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 2 ms 388 KB Output is correct
3 Correct 3 ms 528 KB Output is correct
4 Correct 4 ms 568 KB Output is correct
5 Correct 3 ms 568 KB Output is correct
6 Correct 3 ms 688 KB Output is correct
7 Correct 3 ms 716 KB Output is correct
8 Correct 4 ms 716 KB Output is correct
9 Correct 2 ms 716 KB Output is correct
10 Incorrect 3 ms 716 KB Output isn't correct
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 2 ms 388 KB Output is correct
3 Correct 3 ms 528 KB Output is correct
4 Correct 4 ms 568 KB Output is correct
5 Correct 3 ms 568 KB Output is correct
6 Correct 3 ms 688 KB Output is correct
7 Correct 3 ms 716 KB Output is correct
8 Correct 4 ms 716 KB Output is correct
9 Correct 2 ms 716 KB Output is correct
10 Incorrect 3 ms 716 KB Output isn't correct
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 2 ms 388 KB Output is correct
3 Correct 3 ms 528 KB Output is correct
4 Correct 4 ms 568 KB Output is correct
5 Correct 3 ms 568 KB Output is correct
6 Correct 3 ms 688 KB Output is correct
7 Correct 3 ms 716 KB Output is correct
8 Correct 4 ms 716 KB Output is correct
9 Correct 2 ms 716 KB Output is correct
10 Incorrect 3 ms 716 KB Output isn't correct
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 760 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 760 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 2 ms 388 KB Output is correct
3 Correct 3 ms 528 KB Output is correct
4 Correct 4 ms 568 KB Output is correct
5 Correct 3 ms 568 KB Output is correct
6 Correct 3 ms 688 KB Output is correct
7 Correct 3 ms 716 KB Output is correct
8 Correct 4 ms 716 KB Output is correct
9 Correct 2 ms 716 KB Output is correct
10 Incorrect 3 ms 716 KB Output isn't correct
11 Halted 0 ms 0 KB -