HLG2081分苹果

苹果
Time Limit: 1000 MS Memory Limit: 32768 K
Total Submit: 39(24 users) Total Accepted: 29(22 users) Rating: Special Judge: No
Description

圆桌旁围坐n个人,按顺序将他们编号为1~n,第i个人有xi个苹果(i=1,2,...,n)。苹果的总数量为A。数据保证A为n的倍数,且v=A/n。

每个人可以给左右相邻的人苹果,直到每个人手上的苹果数为平均值v。

输出需要转移的苹果数量的最小值。

Input

有多组测试数据。

每组测试数据的第一行为正整数n(n<=10^6),接下来有n行,每行一个整数,逆时针给出初始状态每人手中的苹果数xi。

处理到文件结束。

Output

对每组测试数据,输出转移苹果数量的最小值,每组一行。数据保证输出为64位无符号整数范围内。

Sample Input
3
100
100
100
4
1
2
5
4
Sample Output
0
4
Source
"科林明伦杯"哈尔滨理工大学第四届ACM程序设计竞赛(预选赛)
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
/*
能两边给,那么x1可以给x2,x2也可给x1,绝对值就是|x1-x2|,我们假设逆时针顺序x2给x1,就相当于x2给了x1了a2(a2正负都OK)个苹果,那个x1就有:A1+a2-a1=m,A2+a3-a2=m......
         a2=m-A1+a1   a3=m-A2+a2=2m-A1-A2+a1   a4=3m-A1-A2-A3+a1.......
由于A1,A2和m都是给定的,所以影响的只有a,也就是指a1.
Ci指Ai-M
 那么a2=a1-C1,a3=a1-C2,a4=a1-C3
使ai的绝对值最小,则转换成一条直线上的点到某点上的距离之和最小的问题
 则a1为这些数的中位数
*/
int A[1000001],C[1000001];
int main()
{
    int n,sum;
    while(~scanf("%d",&n)){
        long long int sum=0;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&A[i]);
            sum+=A[i];
        }
        int v=sum/n;
        /*计算Ci,写写方程代代看看*/
        C[0]=0;
        for(int i=1;i<=n;i++)
        {
            C[i]=A[i]-v+C[i-1];
        }
        /*求和*/
        sort(C+1,C+1+n);
        long long int s=0;
        for(int i=1;i<=n/2;i++)
        {
            s=s+C[n+1-i]-C[i];
        }
        printf("%lld\n",s);
    }
    return 0;
}
 
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<algorithm>
using namespace std;
int a[1000005],c[1000005];
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        long int sum=0;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            sum=sum+a[i];
        }
        int m=sum/n;
        c[0]=0;
        for(int i=1;i<=n;i++)
            c[i]=m+c[i-1]-a[i];
        sort(c+1,c+n+1);

       long  int num=0;
       int temp=c[n/2+1];
        for(int i=1;i<=n;i++)
        {
          num=num+abs(c[i]-temp);

        }
         printf("%ld\n",abs(num));
    }
    return 0;
}
 
时间: 2024-08-05 03:41:55

HLG2081分苹果的相关文章

熊分苹果的问题

今天参加笔试,遇见一道编程题,给定一个1~9的整数N代表熊的数目,每只熊按照如下方式分苹果:先将苹果平均分为N份,再扔掉一个.要求输出最少的苹果总数? 思路1:逐层向下,设总数为X,则第一次每一份为(X-1)/N个苹果,第二次为((N-1)*((X-1)/N)-1)/N,依次类推.......,发现到最后由于嵌套的层数过多,已经被弄晕了,果断换方法. 思路2:(采取补苹果的方法)由题描述,因为要扔一个苹果,所以扔一个苹果==补N-1个苹果,因此第一个熊得到的苹果数为(X+N-1)/N,第二个熊得

C语言 &#183; 分苹果

算法提高 分苹果 时间限制:1.0s   内存限制:256.0MB 问题描述 小朋友排成一排,老师给他们分苹果. 小朋友从左到右标号1..N.有M个老师,每次第i个老师会给第Li个到第Ri个,一共Ri-Li+1个小朋友每人发Ci个苹果. 最后老师想知道每个小朋友有多少苹果. 输入格式 第一行两个整数N.M,表示小朋友个数和老师个数. 接下来M行,每行三个整数Li.Ri.Ci,意义如题目表述. 输出格式 一行N个数,第i个数表示第i个小朋友手上的水果. 样例输入 5 31 2 12 3 22 5

蓝桥杯 算法训练 ALGO-121 猴子分苹果

算法训练 猴子分苹果 时间限制:1.0s   内存限制:256.0MB 问题描述 秋天到了,n只猴子采摘了一大堆苹果放到山洞里,约定第二天平分.这些猴子很崇拜猴王孙悟空,所以都想给他留一些苹果.第一只猴子悄悄来到山洞,把苹果平均分成n份,把剩下的m个苹果吃了,然后藏起来一份,最后把剩下的苹果重新合在一起.这些猴子依次悄悄来到山洞,都做同样的操作,恰好每次都剩下了m个苹果.第二天,这些猴子来到山洞,把剩下的苹果分成n分,巧了,还是剩下了m个.问,原来这些猴子至少采了多少个苹果. 输入格式 两个整数

分苹果

题目: 穷举法:由于3 1 1和1 3 1 是一种分法,所以也就是说在N个篮子里的苹果数目是 n1<=n2<=......<=nn.所以只要进行N次循环,假设上层循环标量是i,则下层循环时j=i. 由于事先N,即篮子的数目是不确定的,所以只能使用递归来确定循环层数. 1 #include<iostream> 2 using namespace std; 3 int count; 4 int foo(int n,int m,int prei,int temp[10]) 5 {

COJN 0583 800602分苹果

800602分苹果 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输入 第一行是测试数据的数目t,以下每行均包含二个整数M和N,以空格分开. 输出 对输入的每组数据M和N,用一行输出相应的K. 输入示例 17 3 输出示例 8 其他说明 数据范围:0<=t<=20,1<=M,N&l

[华为机试真题]70.分苹果

题目 M个相同苹果放到N个相同篮子里有多少种放法,允许有篮子不放. 1<=M<=10,1<=N<=10 例如5个苹果三个篮子,3,1,1 和 1,1,3是同一种放法 输入 7 3 输出 8 思路 设f(m,n) 为m个苹果,n个盘子的放法数目: 当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响.即if(n>m) f(m,n) = f(m,m) 当n<=m:不同的放法可以分成两类: (1)有至少一个盘子空着,即相当于f(m,n) = f(m

算法历练之路——分苹果

分苹果 时间限制: 1Sec 内存限制: 128MB 提交: 231 解决: 69 题目描述小朋友排成一排,老师给他们分苹果. 小朋友从左到右标号1..N.有M个老师,每次第i个老师会给第Li个到第Ri个,一共Ri-Li+1个小朋友每人发Ci个苹果. 最后老师想知道每个小朋友有多少苹果. 数据规模和约定 100%的数据,N.M≤100 000,1≤Li≤Ri≤N,0≤Ci≤100. 输入第一行两个整数N.M,表示小朋友个数和老师个数. 接下来M行,每行三个整数Li.Ri.Ci,意义如题目表述.输

分苹果问题的C++和Python实现

很好玩的一个问题.话说小明的苹果怎么可能一模一样? 显然这并不是重点.重点在于抽象这个问题的方法. 如果从M个苹果,拿出N个苹果,问有几种可能性,很明显这是典型的组合问题: combination algabra; 如果把M个苹果等分成N份.显然只有1种可能. 把苹果分成N堆,求可能性,我一时半会想不出什么数学模型.自然而然,想到了数学方法:迭代逼近和递归. 题目额外说明,1,3,1 和1,1,3算同一种分法.其分发可能等价于将苹果递减或者递增排列. 于是我们开始递归计数: 递归操作:遍历M~0

回档|分苹果

背景:今晚在tyvj参加了一下比赛,没想到可耻的跪了.第一题地球人都知道spfa,结果我写了个坐标类DP还得了30分……悲剧.唯一欣慰的是我用组合数学做出了第二题,奠定了我们学校有五个人冲进前六的基础.先发第二题好了. 题目:由于tyvj比较坑,比赛的题目竟然没了!只能说下大体意思.给定n个苹果,要求分到3个袋子中.袋子是无序的,问有多少种情况,并对k取模. 输入解释:第一行,输入两个整数n,k 输出解释:输出只有一行,即方案总数对k取模的结果. 输入样例: 11 10000 输出样例: 952