这道题就是个水题。。。。
题意:推箱子,只能往左推,不能推左下面的,推完后会产生链式反应左边的都被推,考虑重力下降。
思路:
箱子排布麻烦的只可能是左高右低,中间高和右边高直接往左推就完事了,也就是直接一平均,如果能整除分配到每一列,那就整除,如果不行,就+1处理,如果是左边高会麻烦,因为左边不能往右边推,所以我们从左开始判断,用前缀和从左遍历一次加一列,用ans更新最高的结果就可以了。
/*少说话,多做事*/
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <stdlib.h>
using namespace std;
#define ll long long
int n;
void solve()
{
scanf("%d",&n) ; //输入一共有多少列
ll ans = 0 ;
ll cnt = 0 ;
for(int i= 1 ; i <= n ; i++)
{
ll x;
scanf("%lld",&x); //每一列有多少个方块
cnt+=x ;
ll y =ceil((cnt+0.0)/i) ; //向上取整
ans = max(ans,y) ;
}
printf("%lld\n",ans) ;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
solve();
}
}



京公网安备 11010502036488号