所以,海的那边是什么?
曾经,有一位强者名叫 $\text{Alice}$ ,$\text{Chtholly}$ 想变得和她一样强
但是 $\text{Chtholly}$ 现在还无法做到,她只能摆弄手中的 $n$ 个整数 $a_1, a_2, \cdots, a_n$
$\text{Chtholly}$ 可以进行若干次操作,每次操作可以从 $n$ 个整数中任意选择一个数 $a_i$ ,将它加 $1$ 或减 $1$
一个整数序列被称为“好序列”,当且仅当其单调递增,且相邻两数的差值为 $1$
如 $[2, 3, 4]$ 和 $[9, 10, 11,12]$ 是“好序列”,而 $[1, 1, 4, 5]$ 和 $[1, 3, 4]$ 不是“好序列”
$\text{Chtholly}$ 想知道,最少通过多少次操作,可以将序列 $a_1, a_2, \cdots, a_n$ 变为“好序列”
输入包括两行
第一行包括一个整数 $n$
第二行包括 $n$ 个整数,$a_1, a_2, \cdots, a_n$
输出包括一行
第一行包括一个整数,表示最少的操作次数
4
7 1 4 9
11
7
1 9 1 9 8 1 0
29
对于样例 $1$ ,最优解之一是使序列变为 $[2, 3, 4 ,5]$
对于 $50\%$ 的数据,$1 \leq n \leq 10 ^ 3$
对于 $100\%$ 的数据,$1 \leq n \leq 10^5, 0 \leq a_i \leq 10 ^ 9$
本题可能需要用到排序算法 ,以下代码可以实现对数组的高效排序(从小到大),平均时间复杂度为 $\text{O}(n\log_2 n)$,可供参考
(课堂上没有讲解排序之前可以先不懂原理,能够把以下代码合理地嵌入进自己的程序之中来实现排序即可)
#include <stdio.h>
#include <stdlib.h> //头文件需要添加 stdlib.h
int cmp(const void *p1, const void *p2) {
if (*((int*)p1) <= *((int*)p2))
return -1;
return 1;
}
int a[10] = {1, 9, 4, 9, 2, 0, 2, 3}; //此处元素下标从 0 开始
int main() {
int n = 8; // n 为数组中的元素个数
qsort(a, n, sizeof(a[0]), cmp); // 排序
for (int i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
本题可能需要用到 long long
,请留意
屏幕在深夜微微发亮
思想在那虚树路径上彷徨
平面的向量交错生长
织成 忧伤的网
剪枝剪去我们的疯狂
SPFA告诉我前途在何方
01背包装下了忧伤
笑颜 洋溢脸庞
键盘微凉 鼠标微凉
指尖流淌 代码千行
凸包周长 直径多长
一进考场 全都忘光
你在OJ上提交了千百遍
却依然不能卡进那时限
双手敲尽代码也敲尽岁月
只有我一人 写的题解
凋零在OJ里面
tarjan陪伴强联通分量
生成树完成后思路才闪光
欧拉跑过的七桥古塘
让你 心驰神往
队列进出图上的方向
线段树区间修改求出总量
可持久留下的迹象
我们 俯身欣赏
数论算法 图论算法
高斯费马 树上开花
线性规划 动态规划
时间爆炸 如何优化
我在OI中辗转了千百天
却不让我看AK最后一眼
我用空间换回超限的时间
随重新编译 测完样例
才发现漏洞满篇
原来CE 是因选错语言
其实爆0 只因忘写文件
如果标算太难请坚定信念
不如回头再看一眼题面
以那暴力模拟向正解吊唁
蒟蒻的蜕变 神犇出现
终将与Au擦肩
屏幕在深夜微微发亮
我心在考场
—— Menci/24OI 《膜你抄》