Submission #1071123

#TimeUsernameProblemLanguageResultExecution timeMemory
1071123ttamxCultivation (JOI17_cultivation)C++17
0 / 100
1 ms604 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; const int N=305; const ll INF=1e18; int n; ll r,c; ll x[N],y[N]; ll calc(ll xl,ll xr){ vector<ll> xs; for(int i=0;i<n;i++){ xs.emplace_back(max(1LL,x[i]-xl)); xs.emplace_back(min(r,x[i]+xr)); xs.emplace_back(max(1LL,x[i]-xl-1)); xs.emplace_back(min(r,x[i]+xr+1)); } sort(xs.begin(),xs.end()); xs.erase(unique(xs.begin(),xs.end()),xs.end()); int xn=xs.size(); vector<vector<pair<ll,int>>> event(xn); for(int i=0;i<n;i++){ int xi=lower_bound(xs.begin(),xs.end(),max(1LL,x[i]-xl))-xs.begin(); int xj=upper_bound(xs.begin(),xs.end(),min(r,x[i]+xr))-xs.begin(); event[xi].emplace_back(y[i],1); if(xj<xn){ event[xj].emplace_back(y[i],0); } } ll mxa=0,mxb=0,sum=0; multiset<ll> pts,dif; for(auto &e:event){ for(auto [x,t]:e){ if(t){ auto it=pts.emplace(x); if(next(it)!=pts.end()&&it!=pts.begin()){ dif.erase(dif.find(*next(it)-*prev(it))); } if(next(it)!=pts.end()){ dif.emplace(*next(it)-*it); } if(it!=pts.begin()){ dif.emplace(*it-*prev(it)); } }else{ auto it=pts.find(x); assert(it!=pts.end()); if(next(it)!=pts.end()){ dif.erase(dif.find(*next(it)-*it)); } if(it!=pts.begin()){ dif.erase(dif.find(*it-*prev(it))); } if(next(it)!=pts.end()&&it!=pts.begin()){ dif.emplace(*next(it)-*prev(it)); } pts.erase(it); } } if(pts.empty())return INF; mxa=max(mxa,*pts.begin()-1); mxb=max(mxb,c-*pts.rbegin()); if(!dif.empty()){ sum=max(sum,*dif.rbegin()-1); } } return xl+xr+max(sum,mxa+mxb); } int main(){ cin.tie(nullptr)->sync_with_stdio(false); cin >> r >> c >> n; for(int i=0;i<n;i++){ cin >> x[i] >> y[i]; } vector<ll> xs; for(int i=0;i<n;i++){ xs.emplace_back(x[i]-1); xs.emplace_back(r-x[i]); for(int j=0;j<n;j++){ ll dx=abs(x[i]-x[j])-1; if(dx>=0)xs.emplace_back(dx); } } assert(xs.size()>=r-1); sort(xs.begin(),xs.end()); xs.erase(unique(xs.begin(),xs.end()),xs.end()); ll ans=INF; for(int xl:xs){ for(int xr:xs){ ans=min(ans,calc(xl,xr)); } } cout << ans; }

Compilation message (stderr)

In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from cultivation.cpp:1:
cultivation.cpp: In function 'int main()':
cultivation.cpp:89:21: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
   89 |     assert(xs.size()>=r-1);
      |            ~~~~~~~~~^~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...