求助
查看原帖
求助
993175
a_gold_TomAndJerry楼主2024/4/27 20:05

这里

改了之后的代码:

#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,求助

2024/4/27 20:05
加载中...