vijosp1123-贪心-均分纸牌

来源:互联网 发布:华为天际通数据服务 编辑:程序博客网 时间:2024/05/16 18:09

https://www.vijos.org/p/1123
中文题意。
开始想到了 从左往右那样,但是。 没有想到负数也能传递。觉得最开始传的位置可能不是 两边。。
但是想想就两种状态。
网上说就一种的。。

#include <bits/stdc++.h>using namespace std;/*  还有题意。   负数也是可以传递的。。这点没有想到。*/const int maxn=105;int a[maxn];int b[maxn];int t;int main(){   int t;    scanf("%d",&t);    int sum=0;    for(int i=0;i<t;i++){        scanf("%d",&a[i]);        b[i]=a[i];        sum+=a[i];    }    if(sum%t!=0)    {  puts("-1");    }    else{         int aim=sum/t;         int ans1=0,ans=0;         for(int i=0;i<t;i++){             if(a[i]>aim)                a[i+1]+=a[i]-aim,ans++;             else if(a[i]<aim)                 a[i+1]-=aim-a[i],ans++;         }         for(int i=t-1;i>=0;i--){             if(b[i]>aim)                b[i-1]+=b[i]-aim,ans1++;             else if(b[i]<aim)                 b[i-1]-=aim-b[i],ans1++;         }         printf("%d\n",min(ans1,ans));    }    return 0;}
原创粉丝点击