#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;
};
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';
}
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 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... |