求调
查看原帖
求调
993175
a_gold_TomAndJerry楼主2024/4/30 20:08

这里

重新写了代码,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;
}
2024/4/30 20:08
加载中...