#include <bits/stdc++.h>
using namespace std;
double sum[66];
long long cost(long long st,long long ed)
{
long long ans=0;
while(st<ed)
{
for(int i=30;i>=0;i--)
if(st+sum[i]<=ed)
{
st+=sum[i];
ans++;
break;
}
}
return ans;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
long long n,k;
cin>>n>>k;
for(int i=0;i<=30;i++)
sum[i]=pow(2,i);
long long ans=cost(1,n);
while(k--)
{
long long st,ed;
cin>>st>>ed;
if(st>ed)
swap(st,ed);
if(st==ed)
continue;
ans=min(ans,cost(1,st)+1+cost(ed,n));
}
cout<<ans;
}
原文:https://www.cnblogs.com/baccano-acmer/p/10353804.html