集训队日常训练20181201 E 1005 : 小蝌蚪
时间限制(普通/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 : 小蝌蚪的更多相关文章
- 集训队日常训练20181201 C 1003 : 种类数
时间限制(普通/Java):2000MS/6000MS 内存限制:65536KByte总提交: 8 测试通过:5 描述 一共有 n个数,第 i 个数是 xi ,其中xi ...
- 集训队日常训练20181117 DIV2
大佬们一顿操作猛如虎,拼命AC强啊 4262: 区间异或 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal ...
- 集训队日常训练20181124 DIV2
急急忙忙要出去比赛就拉了一场有点sb的题目 5202: 网络寻路 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte总提交: 15 ...
- 集训队日常训练20181110 DIV2 题解及AC代码
4375: 孪生素数 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 324 ...
- 集训队日常训练20180525-DIV2
A.2295 求有多少素数对和等于n. 暴力. #include <bits/stdc++.h> using namespace std; int ss(int n) { ,a=sqrt( ...
- 集训队日常训练20180525-DIV1
A.2805 N*M的图,每次浇水(X1,Y1)-(X2,Y2)围成的矩形,问最后有多少点被浇水了. 暴力. #include<bits/stdc++.h> using namespace ...
- 集训队日常训练20180518-DIV2
A.3232 n个物品,换取要花积分,问刚好花完积分能换最大多少价值的物品. 多重背包. #include <bits/stdc++.h> using namespace std; ]; ...
- 集训队日常训练20180518-DIV1
A.3583 n根木棍是否能分成相等两堆. 背包dp,首先求和sum,如果为偶数就说明不行,否则考虑做一个sum/2大小的背包. #include<bits/stdc++.h> using ...
- 集训队日常训练20180513-DIV2
A.2176 给一个字符串s,问距离为D的字母对是否存在相同. 模拟. #include<bits/stdc++.h> using namespace std; int main() { ...
随机推荐
- JAVA时间Date工具类
package com.common.util; import java.text.DateFormat; import java.text.ParseException; import java.t ...
- php爬虫入门
本篇文章介绍PHP抓取网页内容技术,利用PHP cURL扩展获取网页内容,还可以抓取网页头部,设置cookie,处理302跳转. 一.cURL安装 采用源码安装PHP时,需要在configure时添加 ...
- CF 219D 树形DP
CF 219D [题目链接]CF 219D [题目类型]树形DP &题意: 给一个n节点的有向无环图,要找一个这样的点:该点到其它n-1要逆转的道路最少,(边<u,v>,如果v要到 ...
- 论文阅读(Weilin Huang——【arXiv2016】Accurate Text Localization in Natural Image with Cascaded Convolutional Text Network)
Weilin Huang——[arXiv2016]Accurate Text Localization in Natural Image with Cascaded Convolutional Tex ...
- QLayout删除所有布局
Qt 的 QLayout 文档里是这么写的,但其实不完整,参看我最下面的代码. [pure virtual] QLayoutItem *QLayout::takeAt(int index) Must ...
- P1186 玛丽卡
题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市到另一个城 ...
- LR12集合点设置和多个负载生成器策略
今天给大家分享几个有关LR12的Controller使用过程中的几个常用问题: 一,脚本中添加集合点函数---lr_rendezvous 1,在被测接口事物函数之前加入集合点函数--lr_rendez ...
- 编程规范(初尝ES6与webpack)
//针对ES6规范(第1-5条)start1.块级作用域let/const取代var:在let和const之间,建议优先使用const,尤其是在全局环境,不应该设置变量,只应设置常量. 2.解构赋值1 ...
- React脚手架create-react-app
1.安装过程 $cnpm install -g -create-react-app $create-react-app apps $cd apps/ $npm start 2.图片路径 不能用相对路径 ...
- IDEA SpringBoot 打包(jar)
项目结构: sf-xxx-api sf-xxx-domain sf-xxx-common sf-xxx-web (web模块) 期望输出结果目录 bin/server.sh libs/**.jar,* ...