• 计蒜客 聪明的班主任(思维)


    题目链接:https://nanti.jisuanke.com/t/15723

    题解:一道挺好的思维题,有点难想。在这里举几个例子如果都过了的话应该就是对了。

    0 6 0 6->3-------0 6 6->4--------3 4 6 3 4 10->5---------1 2 6 1 2 5 4->3--------4 0 1 3->2

    大致思路就是先将所有数都减去它们的平均值然后再求前缀和。答案就是max(abs(负的最大值),正的最大值)

    为什么是这样呢。其实前缀表示的是这些数变成0所要经过的数,所以只要取最大的那个就行了。

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    const int M = 1e4 + 10;
    typedef long long ll;
    ll a[M] , pre[M];
    int main() {
        int t;
        scanf("%d" , &t);
        while(t--) {
            ll n;
            scanf("%lld" , &n);
            ll sum = 0;
            for(int i = 1 ; i <= n ; i++) {
                scanf("%lld" , &a[i]);
                sum += a[i];
            }
            if(sum % n == 0) {
                ll gg = sum / n;
                for(int i = 1 ; i <= n ; i++) {
                    a[i] -= gg;
                }
                pre[0] = 0;
                for(int i = 1 ; i <= n ; i++) {
                    pre[i] = pre[i - 1] + a[i];
                }
                ll MIN = 0 , MAX = 0;
                for(int i = 1 ; i <= n ; i++) {
                    MIN = min(MIN , pre[i]);
                    MAX = max(MAX , pre[i]);
                }
                printf("%lld
    " , max(-MIN , MAX));
            }
            else printf("-1
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    数据类型
    python安装
    计算机基础
    Ajax--1
    ASP.net+MVC--2
    More lumber is required
    History Grading
    strcmp() Anyone?
    How Many Points of Intersection?
    Remember the Word
  • 原文地址:https://www.cnblogs.com/TnT2333333/p/7001509.html
Copyright © 2020-2023  润新知