时间限制(普通/Java):500MS/1500MS     内存限制:65536KByte
总提交: 25            测试通过:5

描述

有 n 个装着小蝌蚪的水缸排成一排,你拥有一个无限蝌蚪的袋子,可以往一个水缸里放入一只蝌蚪,也可以取出一只蝌蚪,求最少的操作数,使得每个水缸的蝌蚪数量形成一个公差为 k 等差数列。

输入

多组数据(<35),每组数据描述如下。

第一行一个数 n,k(1<=n<=105,0<=k=<104)。
第二行 n个数,表示每个水缸里的蝌蚪数目(0<=ai<=104)。

输出

每组数据输出一个最少操作次数。

样例输入

4 2
1 2 3 4
4 2
0 1 2 3

样例输出

4
6

提示

蝌蚪的个数不能为负。

题解:

最多进行多少次加减操作能使给定数列成为一个公差为k的等差数列(每次只能加或减1)

首先,先将第一个数假设为一个定值,然后改变后面的值,得到一个公差为k的等差数列,用一个数组b去记录每一个数和它应得的数的差值,此时,对第一个数进行减x的操作,那么后面每一位数都要进行减x的操作,也就是abs(b[i]-x),这个也就是每一位所要得到

应得值的次数,那么只要从0循环到n每一位都进行上述操作得到的和就是最少操作次数,x取数列中位数的时候,和为最小。但是因为应得的值都必须是正数,所以得考虑x的值,使得最后得到的数列每一位都是正数。

 #include "bits/stdc++.h"
#define ll long long
using namespace std;
inline void read(int &x)
{
x=;char c=getchar();
while(c<'' || c>'')c=getchar();
while(c>='' && c<=''){
x=x*+c-'';
c=getchar();
}
}
inline void write(int x)
{
int y=,len=;
while(y<=x) {y*=;len++;}
while(len--){y/=;putchar(x/y+);x%=y;}
}
ll a[];
ll b[];
int main()
{
ll n,k;
while(~scanf("%I64d%I64d",&n,&k))
{
scanf("%I64d",&a[]);
//b[0]=a[0];
int p=a[];
b[]=;
for(int i=;i<n;++i)
{
scanf("%I64d",&a[i]);
//b[i]=b[i-1]+k-a[i]+b[i-1];
b[i]=p+k-a[i];
p+=k;
}
sort(b,b+n);
ll p1=a[];
ll res=;
if(b[n/]>p1)for(int i=;i<n;++i)res+=abs(b[i]-p1);
else for(int i=;i<n;++i)res+=abs(b[i]-b[n/]);
printf("%I64d\n",res);
}
}

集训队日常训练20181201 E 1005 : 小蝌蚪的更多相关文章

  1. 集训队日常训练20181201 C 1003 : 种类数

    时间限制(普通/Java):2000MS/6000MS     内存限制:65536KByte总提交: 8            测试通过:5 描述 一共有 n个数,第 i 个数是 xi ,其中xi  ...

  2. 集训队日常训练20181117 DIV2

    大佬们一顿操作猛如虎,拼命AC强啊 4262: 区间异或  Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal ...

  3. 集训队日常训练20181124 DIV2

    急急忙忙要出去比赛就拉了一场有点sb的题目 5202: 网络寻路  时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte总提交: 15            ...

  4. 集训队日常训练20181110 DIV2 题解及AC代码

    4375: 孪生素数  Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal Submit: 324       ...

  5. 集训队日常训练20180525-DIV2

    A.2295 求有多少素数对和等于n. 暴力. #include <bits/stdc++.h> using namespace std; int ss(int n) { ,a=sqrt( ...

  6. 集训队日常训练20180525-DIV1

    A.2805 N*M的图,每次浇水(X1,Y1)-(X2,Y2)围成的矩形,问最后有多少点被浇水了. 暴力. #include<bits/stdc++.h> using namespace ...

  7. 集训队日常训练20180518-DIV2

    A.3232 n个物品,换取要花积分,问刚好花完积分能换最大多少价值的物品. 多重背包. #include <bits/stdc++.h> using namespace std; ]; ...

  8. 集训队日常训练20180518-DIV1

    A.3583 n根木棍是否能分成相等两堆. 背包dp,首先求和sum,如果为偶数就说明不行,否则考虑做一个sum/2大小的背包. #include<bits/stdc++.h> using ...

  9. 集训队日常训练20180513-DIV2

    A.2176 给一个字符串s,问距离为D的字母对是否存在相同. 模拟. #include<bits/stdc++.h> using namespace std; int main() { ...

随机推荐

  1. Django 分组 聚合

    base_sql = Order.objects.filter(is_paid=True, merchant=merchant_id) # 如果aggregate前没有values,得到的结果是一个字 ...

  2. numpy处理时间序列

    1. 字符串转成numpy.datetime64格式 import numpy as np #将字符串转换成numpy格式时间 #注意个位前补0,如1月写成01 nd=np.datetime64('2 ...

  3. Scrapy详解

    一.爬虫生态框架 在管道传数据只能传字典和items类型. 将 上一return语句注释则会报错  如: 如上图,爬虫文件中有一个name属性,如果多个爬虫可以通过这个属性在管道控制分析的是哪个爬虫的 ...

  4. mutex,thread

    //#include <stdio.h> //#include <stdlib.h> //#include <unistd.h> #include <wind ...

  5. 字节转化为结构体BytesToStruct

    //结构体转字节数组 public byte[] StructToBytes (object structObj) { int size = Marshal.SizeOf (structObj);// ...

  6. python itertools 模块

    Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数 首先,我们看看itertools提供的几个“无限”迭代器: >>> import itertools ...

  7. Git 教程(二):提交和回退

    我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件,改成如下内容: Git is a distributed version c ...

  8. Hadoop HDFS, YARN ,MAPREDUCE,MAPREDUCE ON YARN

    HDFS 系统架构图 NameNode 是主节点,存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DataNode等.NameNode将 ...

  9. qemu到kvm的处理,再到vm的运行

    1.QEMU创建虚拟机发起:kvm_ioctl(s, KVM_CREATE_VM, type); KVM中kvm_dev_ioctl判断参数->kvm_dev_ioctl_create_vm-& ...

  10. tensorflow学习笔记2:c++程序静态链接tensorflow库加载模型文件

    首先需要搞定tensorflow c++库,搜了一遍没有找到现成的包,于是下载tensorflow的源码开始编译: tensorflow的contrib中有一个makefile项目,极大的简化的接下来 ...