답안 #27823

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
27823 2017-07-14T07:23:05 Z 서규호(#1160) Cultivation (JOI17_cultivation) C++14
0 / 100
2000 ms 2032 KB
#include <bits/stdc++.h>

#define lld long long
#define pii pair<int,int>
#define pll pair<lld,lld>
#define pb push_back
#define next nextt
#define left leftt
#define right rightt
#define Inf 1000000000
#define Linf 1000000000000000000LL
#define Mod 1000000007LL

using namespace std;

int N; lld R,C,ans;
struct data{
	lld x,y;
}a[302];
multiset<lld> S;

void process(lld l,lld r){
	lld ly,ry,lry;
	ly = ry = lry = 0;

	vector<pll> tmp;
	for(int i=1; i<=N; i++){
		tmp.pb({max((lld)1,a[i].x-l),a[i].y});
		tmp.pb({min(R,a[i].x+r)+1,-a[i].y});
	}
	sort(tmp.begin(),tmp.end());
	if(tmp[0].first != 1 || tmp.back().first != R+1) return;
	for(int i=0; i<tmp.size(); i++){
        int e;
        for(int j=i; j<tmp.size(); j++){
            if(tmp[i].first != tmp[j].first) break;
            e = j;
        }
        for(int j=i; j<=e; j++){
            if(tmp[j].second > 0) S.insert(tmp[j].second);
            else S.erase(S.find(-tmp[j].second));
        }
        if(S.empty() && tmp[i].first <= R) return;
        if(S.empty()) break;
        auto it = S.end(); it--;
        ly = max(ly,*S.begin()-1);
        ry = max(ry,C-(*it));
        lld bef;
        for(it = S.begin(); it != S.end(); it++){
            if(it == S.begin()){
                bef = *it;
                continue;
            }
            lry = max(lry,*it-bef-1);
            bef = *it;
        }
        i = e;
	}
	if(ly > ry) swap(ly,ry);
	if(ly+ry < lry){
		ry = lry-ly;
	}
	ans = min(ans,min(l,r)+min(ly,ry)+l+r+ly+ry);
}

int main(){
    //freopen("input.txt","r",stdin);
	scanf("%lld %lld %d",&R,&C,&N);
	for(int i=1; i<=N; i++){
		scanf("%d %d",&a[i].x,&a[i].y);
	}
	sort(a+1,a+N+1,[&](data &x,data &y){
		return x.x < y.x;
	});
	ans = Linf;
	for(int i=0; i<=R-1; i++){
		for(int j=0; j<=R-1; j++){
			process(i,j);
		}
	}
	process(3,0);
	printf("%lld\n",ans);

	return 0;
}

Compilation message

cultivation.cpp: In function 'void process(long long int, long long int)':
cultivation.cpp:33:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<tmp.size(); i++){
                ^
cultivation.cpp:35:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int j=i; j<tmp.size(); j++){
                       ^
cultivation.cpp: In function 'int main()':
cultivation.cpp:70:32: warning: format '%d' expects argument of type 'int*', but argument 2 has type 'long long int*' [-Wformat=]
   scanf("%d %d",&a[i].x,&a[i].y);
                                ^
cultivation.cpp:70:32: warning: format '%d' expects argument of type 'int*', but argument 3 has type 'long long int*' [-Wformat=]
cultivation.cpp:68:32: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%lld %lld %d",&R,&C,&N);
                                ^
cultivation.cpp:70:33: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d",&a[i].x,&a[i].y);
                                 ^
cultivation.cpp: In function 'void process(long long int, long long int)':
cultivation.cpp:39:23: warning: 'e' may be used uninitialized in this function [-Wmaybe-uninitialized]
         for(int j=i; j<=e; j++){
                       ^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2032 KB Output is correct
2 Incorrect 0 ms 2032 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2032 KB Output is correct
2 Incorrect 0 ms 2032 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2032 KB Output is correct
2 Incorrect 0 ms 2032 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2000 ms 2032 KB Execution timed out
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2000 ms 2032 KB Execution timed out
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2032 KB Output is correct
2 Incorrect 0 ms 2032 KB Output isn't correct
3 Halted 0 ms 0 KB -