题意
有n栋积木高楼,编号从1到n,其中第 i 个积木高楼由a[i]块积木构成,如果编号为 i 和 j 的积木高楼满足 a[i]>a[j],则可以从 i 拿一块积木放到 j 上,问进行若干次操作后,a[1]的最大值是多少
解题思路
既然题目说在a[i]>a[j]时可以将 i 上的一块积木放到 j 上来,而且还要求a[1]的值最大,那么可以把a[2]~a[n]排序,再把其中比a[1]多的那些全都匀到a[1]上来,这样就能使a[1]最大化了
AC代码
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int t,n,a[N];
int main(){
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;++i){
cin>>a[i];
}
sort(a+2,a+n+1);
for(int i=2;i<=n;++i){
int k=a[i]-a[1];
if(k>0){
a[1]=a[1]+(k-1)/2+1;
}
}
cout<<a[1]<<"\n";
}
return 0;
}