zoukankan      html  css  js  c++  java
  • P2512 [HAOI2008]糖果传递

    题目描述

    有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。

    输入输出格式

    输入格式:

    小朋友个数n 下面n行 ai

    输出格式:

    求使所有人获得均等糖果的最小代价。

    输入输出样例

    输入样例#1: 
    4
    1
    2
    5
    4
    输出样例#1: 
    4

    说明

    对于100%的数据 n≤106

    Solution:

      本题和上篇博客一样,又是一道环形均分纸牌问题,只不过本题数据比较大,注意开$long;long$和读入优化,基本就$OK$了。

    代码:

    #include<bits/stdc++.h>
    #define il inline
    #define ll long long
    using namespace std;
    const int N=1e6+5;
    ll n,a[N],sum,s[N];
    il ll gi(){
        ll a=0;char x=getchar();bool f=0;
        while((x<'0'||x>'9')&&x!='-')x=getchar();
        if(x=='-')x=getchar(),f=1;
        while(x>='0'&&x<='9')a=a*10+x-48,x=getchar();
        return f?-a:a;
    }
    int main()
    {
        n=gi();
        for(int i=1;i<=n;i++)a[i]=gi(),sum+=a[i];
        sum/=n;
        for(int i=1;i<=n;i++)a[i]-=sum,s[i]=s[i-1]+a[i];
        sort(s+1,s+n+1);
        sum=0;
        for(int i=1;i<=n;i++)sum+=abs(s[n/2+1]-s[i]);
        cout<<sum;
        return 0;
    }
  • 相关阅读:
    sed 练习
    正则表达式
    字符转换命令
    命令执行判断依据
    shell 操作环境
    选取命令
    排序命令
    命令别名与历史命令
    变量的学习
    防止恶意跳转
  • 原文地址:https://www.cnblogs.com/five20/p/8870012.html
Copyright © 2011-2022 走看看