# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
27825 | suhgyuho_william | Cultivation (JOI17_cultivation) | C++14 | 2000 ms | 2032 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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,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;
vector<int> X;
a[N+1].x = R+1;
for(int i=0; i<=N; i++){
for(int j=i; j<=N+1; j++){
X.pb(a[j].x-a[i].x);
X.pb(a[j].x-a[i].x-1);
X.pb(a[j].x-a[i].x+1);
}
}
sort(X.begin(),X.end());
X.erase(unique(X.begin(),X.end()),X.end());
for(auto &i : X){
for(auto &j : X){
process(i,j);
}
}
process(3,0);
printf("%lld\n",ans);
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |