Submission #1195092

#TimeUsernameProblemLanguageResultExecution timeMemory
1195092hackstarPalembang Bridges (APIO15_bridge)C++20
22 / 100
2096 ms2704 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); for(int i=0;i<mx_;i++){ for(int j=i+1;j<mx_;j++){ int cur=calc_k2(i,j); ans=min(ans,cur); } } 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...