枚举每个可能的数作为结果即可。
#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(); } }