枚举每个可能的数作为结果即可。
#include<bits/stdc++.h>
#define int long long
#define double long double
#define x first
#define y second
using namespace std;
typedef long long LL;
typedef long long ll;
typedef pair<int,int> PII;
const int N=3e5+10;
const int M=1e3+10;
int mod=1e9+7;
int a[N];
void solve(){
int n;cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int sum=a[1];
int ans=1000000000,s1=0;
while(sum){
int f=0,cnt=0;
for(int i=2;i<=n;i++){
if(a[i]<sum){
f++;
break;
} else {
int ss=a[i];
while(ss>sum){
ss/=2;
cnt++;
}
if(ss!=sum){
f++;
break;
}
}
}
sum/=2;
if(!f) ans=min(ans,cnt+s1);
s1++;
}
cout<<ans<<endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int _;
_=1;
//cin>>_;
while(_--){
solve();
}
}

京公网安备 11010502036488号