Game(前缀和)

Game

https://ac.nowcoder.com/acm/contest/5675/E

这道题就是个水题。。。。
题意:推箱子,只能往左推,不能推左下面的,推完后会产生链式反应左边的都被推,考虑重力下降。
思路:
箱子排布麻烦的只可能是左高右低,中间高和右边高直接往左推就完事了,也就是直接一平均,如果能整除分配到每一列,那就整除,如果不行,就+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();
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务