重新写了代码,RE,真的查不出来
#include<bits/stdc++.h>
using namespace std;
int t;
long long num=0;
long long qpow(long long k,long long l){
if(l==0) return 1;
else if(l%2==1) return qpow(k,l-1)*k;
else{
long long temp=qpow(k,l/2);
return temp*temp;
}
}
int main(){
scanf("%d",&t);
while(t--){
int n,flag=1;
num=0;
long long a[31];
memset(a,0,sizeof(a));
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
for(int i=n;i>1;i--){
if(a[i]<=a[i-1]){
if((a[i]==1&&i>2)||(a[i]==0&&i==2)){
flag=0;
cout<<-1<<endl;
break;
}else{
for(int j=1;j<=a[i-1]/2;j++){
long long d=qpow(2,j);
if(a[i-1]/d<a[i]){
num+=j;
a[i-1]/=d;
break;
}
}
}
}
}
if(a[1]>=a[2]&&flag==1){
for(int j=1;j<=a[1]/2;j++){
long long d=qpow(2,j);
if(a[1]/d<a[2]){
num+=j;
break;
}
}
}
if(flag) cout<<num<<endl;
}
return 0;
}