(注:复制下来太难改了,直接截图懒得改)
解释全在代码里,自己看吧
for(ll i=1,j;i<=n;i++){
cin>>a[i];//输入
j=a[i];//不能直接改a[i]
cnt[i]=0;//砍的次数
while(j!=1){
j=sqrtl(j/2+1);
cnt[i]++;//记录看的次数
}
res=max(res,cnt[i]);//最大砍的次数
}
for(ll i=res;i>=1;i--){
for(ll j=1;j<=n;j++){
if(cnt[j]==i){//与当前砍的次数相等
if(a[j]!=a[j+1])ans++;//不等于后面的高度魔法使用次数+1
a[j]=sqrtl(a[j]/2+1);//砍过后的长度
cnt[j]--;//砍的次数-1
}
}
}
(注:sqrtl是用于处理更大范围的数的库函数,与sqrt一样都是开根号)