Submission #1195118

#TimeUsernameProblemLanguageResultExecution timeMemory
1195118hackstarPalembang Bridges (APIO15_bridge)C++20
31 / 100
61 ms2632 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define all(x) x.begin(),x.end() struct node{ char home1,off1; int home2,off2; }; void solve(){ int k,n; cin>>k>>n; vector<node>a(n); int mx_=0; for(int i=0;i<n;i++){ cin>>a[i].home1>>a[i].home2>>a[i].off1>>a[i].off2; mx_=max(mx_,a[i].home2); mx_=max(mx_,a[i].off2); } auto dist=[&](node x,int bridge)->int{ if(x.home1==x.off1){ return abs(x.home2-x.off2); } return 1+abs(x.home2-bridge)+abs(x.off2-bridge); }; auto calc=[&](int bridge)->int{ int ans=0; for(int i=0;i<n;i++){ ans+=dist(a[i],bridge); } return ans; }; auto get_mx=[&](int bridge)->int{ int ans=dist(a[0],bridge); for(int i=1;i<n;i++){ ans=max(ans,dist(a[i],bridge)); } return ans; }; if(k==1){ int l=0,r=mx_; while (l<r){ int mid=(l+r)>>1; if (calc(mid)<=calc(mid+1)){ r=mid; } else{ l=mid+1; } } cout<<calc(l)<<'\n'; return; } auto dist_k2=[&](node x,int bridge1,int bridge2)->int{ if(x.home1==x.off1){ return abs(x.home2-x.off2); } return 1+min(abs(x.home2-bridge1)+abs(x.off2-bridge1),abs(x.home2-bridge2)+abs(x.off2-bridge2)); }; auto calc_k2=[&](int bridge1,int bridge2)->int{ int ans=0; for(int i=0;i<n;i++){ ans+=dist_k2(a[i],bridge1,bridge2); } return ans; }; int ans=calc_k2(0,1); map<int,int>vis; for(int i=max(0ll,n/2-100);i<=min(n-1,n/2+100);i++){ node ff=a[i]; int l=ff.home2,r=mx_; if(vis[ff.home2]==1); else{ while (l<r){ int mid=(l+r)>>1; if (calc_k2(mid,ff.home2)<=calc_k2(mid+1,ff.home2)){ r=mid; } else{ l=mid+1; } } ans=min(ans,calc_k2(ff.home2,l)); vis[ff.home2]=1; } l=ff.off2,r=mx_; if(vis[ff.off2]==1); else{ while (l<r){ int mid=(l+r)>>1; if (calc_k2(mid,ff.off2)<=calc_k2(mid+1,ff.off2)){ r=mid; } else{ l=mid+1; } } ans=min(ans,calc_k2(ff.off2,l)); vis[ff.off2]=1; } } cout<<ans<<'\n'; } signed main(){ int t=1; #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif //cin>>t; while(t--){ solve(); } }
#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...