改了之后的代码:
#include<bits/stdc++.h>
using namespace std;
long long t,n,num=0;
long long a[31];
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
{
int temp = qpow(k, l / 2);
return temp * temp;
}
}
int main(){
cin>>t;
while(t--){
int flag=0;
num=0;
memset(a,0,sizeof(a));
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=n;i>=1;i--){
if(a[i]<=a[i-1]){
for(int j=1;j<=a[i-1]/2;j++){
long long d=qpow(2,j);
//cout<<j<<endl;
if(a[i-1]/d<a[i]){
num+=j;
a[i-1]/=d;
break;
}
if((a[i-1]/d==1&&a[i]==1)&&i>2){
flag=1;
break;
}
}
if(flag) break;
}
}
if(flag){
cout<<-1<<endl;
continue;
}
if(a[1]>=a[2]){
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(a[1]/d==0&&a[2]==0) break;
}
}
cout<<num<<endl;
}
return 0;
}
RE,求助