Submission #1160558

#TimeUsernameProblemLanguageResultExecution timeMemory
1160558todCultivation (JOI17_cultivation)C++20
0 / 100
0 ms392 KiB
#include <bits/stdc++.h> #define ll long long #define fi first #define se second using namespace std; bool cmp(pair<ll,ll> x, pair<ll,ll>y){ if(x.fi==y.fi) return x.se<y.se; return x.fi<y.fi; } pair<ll,ll> a[5005]; map<ll,ll> mp1,mp2; vector<pair<ll,ll>> ans[10]; int main() { ll n,r,c,res=INT_MAX; cin>>r>>c; cin>>n; for(ll i=1;i<=n;i++){ cin>>a[i].fi>>a[i].se; } for(ll i=1;i<=n;i++){ vector<ll> b; ll d,l; l=d=0; // c.push_back(0); // c=b; if(mp1[a[i].fi]==0){ ll h1=0,h2=0; for(ll j=1;j<=n;j++){ if(a[i].fi == a[j].fi){ b.push_back(a[j].se); } } // for(ll x:b) cout<<x<<' '; // b.push_back(c+1); sort(b.begin(),b.end()); for(ll j=0;j<b.size()-1;j++){ if(b[j+1] - b[j] -1 <= d) continue; d = b[j+1] - b[j] -1; // cout<<1; } h1 = b.back() - b[0] +1; if(c - b.back() >= d){ h1 += d; } else{ h1 += c - b[b.size()-1]; } if(c-(b[0]+h1-1) > b[0]-1 ) ans[1].push_back({c-h1 + d,a[i].fi}); else ans[2].push_back({c-h1 + d,a[i].fi}); // cout<<c<<' '<<h1<<' '<<d<<' '<<c-h1 + d<<endl; for(ll j=b.size()-1;j>0;j--){ if(b[j] - b[j-1] -1 <= l) continue; l = b[j] - b[j-1] -1; } h2 = b[b.size()-1] - b[0] +1; if(b[0] -1 >= l){ h2 += l; } else{ h2 += b[0] -1; } if(c-(b[0]+h2-1) > b[0]-1 ) ans[1].push_back({c-h2 + l,a[i].fi}); else ans[2].push_back({c-h2 + l,a[i].fi}); // cout<<c-h2 + l<<endl; mp1[a[i].fi]++; } d=l=0; b.clear(); if(mp2[a[i].se]==0){ ll h1=0,h2=0; for(ll j=1;j<=n;j++){ if(a[i].se == a[j].se){ b.push_back(a[j].fi); } } // b.push_back(c+1); sort(b.begin(),b.end()); for(ll j=0;j<b.size()-1;j++){ if(b[j+1] - b[j] -1 <= d) continue; d = b[j+1] - b[j] -1; } h1 = b[b.size()-1] - b[0] +1; if(r - b[b.size()-1] >= d){ h1 += d; } else{ h1 += r - b[b.size()-1]; } if(r-(b[0]+h1-1) > b[0]-1 ) ans[3].push_back({r-h1 + d,a[i].fi}); else ans[4].push_back({r-h1 + d,a[i].fi}); // cout<<c-h1 + d<<endl; for(ll j=b.size()-1;j>0;j--){ if(b[j] - b[j-1] -1 <= l) continue; l = b[j] - b[j-1] -1; } h2 = b[b.size()-1] - b[0] +1; if(b[0] -1 >= l){ h2 += l; } else{ h2 += b[0] -1; } if(r-(b[0]+h2-1) > b[0]-1 ) ans[1].push_back({r-h1 + d,a[i].fi}); else ans[2].push_back({r-h1 + d,a[i].fi}); // c.push_back(r+1); // cout<<c-h2 + l<<endl; mp2[a[i].se]++; } b.clear(); } for(ll i=1;i<=4;i++){ sort(ans[i].begin(),ans[i].end(),cmp); ll m=0,ans1=INT_MAX,d,l; d=l=0; vector<ll>b; while(m<ans[i].size() && ans[i][m].fi==ans[i][0].fi){ b.push_back(ans[i][m].se); m++; } // cout<<m; // for(pair<ll,ll> x : ans[i]){ // cout<<x.se<<' '; // } // cout<<endl; if(m==0) continue; if(i <= 2){ ll h1=0,h2=0; for(ll j=0;j<b.size()-1;j++){ if(b[j+1] - b[j] -1 <= d) continue; d = b[j+1] - b[j] -1; } // cout<<d<<' '; h1 = b.back() - b[0] +1; if(r - b.back() >= d){ h1 += d; } else{ h1 += r - b[b.size()-1]; } ans1 = min(ans1,r-h1 + d); for(ll j=b.size()-1;j>0;j--){ if(b[j] - b[j-1] -1 <= l) continue; l = b[j] - b[j-1] -1; } h2 = b[b.size()-1] - b[0] +1; if(b[0] -1 >= l){ h2 += l; } else{ h2 += b[0] -1; } ans1 = min(ans1,r-h2 + l); } else{ ll h1=0,h2=0; for(ll j=0;j<b.size()-1;j++){ if(b[j+1] - b[j] -1 <= d) continue; d = b[j+1] - b[j] -1; } h1 = b.back() - b[0] +1; if(c - b.back() >= d){ h1 += d; } else{ h1 += c - b[b.size()-1]; } ans1 = min(ans1,c-h1 + d); for(ll j=b.size()-1;j>0;j--){ if(b[j] - b[j-1] -1 <= l) continue; l = b[j] - b[j-1] -1; } h2 = b[b.size()-1] - b[0] +1; if(b[0] -1 >= l){ h2 += l; } else{ h2 += b[0] -1; } ans1 = min(ans1,c-h2 + l); } // cout<<ans1<<' '<<ans[i][0].fi<<'\n'; if(res>ans1 + ans[i][0].fi) res = ans1 + ans[i][0].fi ; } cout<<res; return 0; }
#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...