集训队日常训练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() { ...
随机推荐
- 如何创建自己的composer包
composer中文网 :https://www.phpcomposer.com/ 一.前期准备: composer 安装 Windows安装: 1.下载安装包,https://getcomposer ...
- new Date() 日期格式处理
var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-???? ...
- raise error
raise TypeError("参数q_type 错误 ")
- windows下安装php reids扩展
1.使用phpinfo()函数查看PHP的版本信息,这会决定扩展文件版本. 2.下载php_igbinary-1.2.1-5.5-ts-vc11-x64.zip,php_redis-2.2.5-5.6 ...
- 上海嘉韦思杯部分writeup
第二题 打开赛题,看到加密字符串,进行base64解密,发现是JSFUCK,再次解密,控制台得到flag. 第三题 打开频谱图得到flag,flag中有三个_,联想到音频文件详细信息中的三个zero, ...
- LeetCode 5 最长对称串
LeetCode 5 最长对称串 最早时候做这道题的时候还是用Java写的,用的是字符串匹配的思路,一直Time Limit Exceeded.甚至还想过用KMP开优化子串查找. public cla ...
- nfs 共享目录
依赖的包 yum -y install nfs-utils vim /etc/exports /data/test_nfs 10.125.37.12/16(rw,sync,no_root_squash ...
- EntityFramework Core:版本不一致问题
code first 更新数据库时候报版本不对或者未找到错误 解决方法: 在项目文件中添加以下节点: <PropertyGroup> <OutputType>Library&l ...
- Sublime 个人常用快捷键
Sublime 个人常用快捷键 Hot Key Alt + F3 选中文本所以有相同项;同多次Ctrl + D Ctrl + L 选中整行,继续按可继续选 Ctrl + Shift + M 选择括号内 ...
- Fiddler使用教程(转)
Fiddler是最强大最好用的Web调试工具之一,你对HTTP协议越了解, 你就能越掌握Fiddler的使用方法.你越使用Fiddler,就越能帮助你了解HTTP协议.Fiddler无论对开发人员或者 ...