Mister B and PR Shifts,题解
题目链接
分析:
题意很明白,不再多说了,直接分析题目,首先想一想暴力,直接枚举起点,然后求出来,时间复杂度n*n,显然不太好,所以我们考虑换一种方法枚举,当然本质还是枚举,其实你会发现变化i次和i+1次是由很强的关联性的,除了末尾的元素之外,i+1每个元素提供的值都会和i的相差1,而末尾元素之接特判一下就好了,我们只需要知道的是没次有多少个将会-1的(自然+1的也可以之接求得),我们来想一下这个问题,如果不考虑后面的元素回到前面,那么其实每个元素在什么时候由加变减是确定的,可以直接找到,而对于从后面新加入的元素,开始当然可以加上,然后记录一下从哪里开始把它减掉就好了,当然如果是1的话加上就会立刻减掉,也没有问题,最后再处理答案就好了。
当然,数组开2e6防止溢出。
代码:
#include <cstdio>
const int maxn=2e6+;
int a[maxn];
int cj[maxn];
int kj[maxn];
long long ans[maxn];
long long Abs(int a){
long long s=(long long)a;
return s>?s:-s;
}
int main(){
int n;
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
if(a[i]-i>=)
cj[a[i]-i]++;
}
int s=;
long long mi=1e18;
for(int i=;i<=n;i++){
ans[]+=Abs(a[i]-i);
kj[]+=cj[i-];
}
for(int i=;i<=n-;i++){
kj[i]+=kj[i-]-cj[i-];
cj[a[n-i+]-+i]++;
kj[i+]++;
}
for(int i=;i<=n-;i++){
ans[i]=ans[i-]-Abs(a[n-i+]-n)+Abs(a[n-i+]-);
ans[i]-=(long long)kj[i];
ans[i]+=(long long)n-(long long)-(long long)kj[i];
}
for(int i=;i<=n-;i++)
if(ans[i]<mi){
mi=ans[i];
s=i;
}
printf("%lld %d",mi,s);
}
Mister B and PR Shifts,题解的更多相关文章
- CF819B Mister B and PR Shifts 题解
题目 Some time ago Mister B detected a strange signal from the space, which he started to study. After ...
- Codeforces Round #421 (Div. 2) D. Mister B and PR Shifts
Codeforces Round #421 (Div. 2) D. Mister B and PR Shifts 题意:给一个长度为\(n\)的排列,每次可以向右循环移位一次,计算\(\sum_{i= ...
- codeforces 820 D. Mister B and PR Shifts(思维)
题目链接:http://codeforces.com/contest/820/problem/D 题意:求.有一种操作 k = 0: shift p1, p2, ... pn, k = 1: shif ...
- D. Mister B and PR Shifts
;//开两倍空间 int n; arr p,cnt; int l,r,m; ll sum = ,ans; int main() { // file("test"); sdf(n); ...
- [CF819B]Mister B and PR Shifts
题意:定义一个排列$p_{1\cdots n}$的“偏移量”$D=\sum _{i=1}^n\left|p_i-i\right|$ 求它所有的轮换排列中偏移量最小的是多少,要求输出轮换序数 暴力就是求 ...
- Codeforces Round #421 (Div. 2)D - Mister B and PR Shifts(模拟)
传送门 题意 给出n个数,计算在进行n-1次右移中\(min\sum_{i=1}^nabs(p_i-i)\) 分析 我们设置cnt[p[i]-i]为一个数p[i]与它标准位置(如1的标准位置为1)的左 ...
- codeforces 819B - Mister B and PR Shifts(思维)
原题链接:http://codeforces.com/problemset/problem/819/B 题意:把一个数列整体往右移k位(大于n位置的数移动到数列前端,循环滚动),定义该数列的“偏差值” ...
- CF820D Mister B and PR Shifts
题目链接:http://codeforces.com/problemset/problem/820/D 题目大意: 给出一个\(n\)元素数组\(p[]\),定义数组\(p[]\)的误差值为\(\su ...
- CF819B Mister B and PR Shifts 思维题
分析 这道题\(n\leq10^{6}\),显然\(n^{2}\)的暴力是无法解决问题的 那么我们可以考虑数列的某一种性质 因为最终的答案是\(\sum{n \atop i=1} |p_i - i|\ ...
随机推荐
- webpack+vue+.vue组件模板文件 所需要的包
{ "name": "webpack-study02", "version": "1.0.0", "de ...
- php symfony/var-dumper 打印插件
$records = array( array( 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe', ), arr ...
- Pyinstaller 打包python 到exe 在windows下免python环境运行python
在创建了独立应用(自包含该应用的依赖包)之后,还可以使用 PyInstaller 将 Python 程序生成可直接运行的程序,这个程序就可以被分发到对应的 Windows 或 Mac OS X 平台上 ...
- TensorFlow从0到1之XLA加速线性代数编译器(9)
加速线性代数器(Accelerated linear algebra,XLA)是线性代数领域的专用编译器.根据 https://www.tensorflow.org/performance/xla/, ...
- c printf(“%d”,变量)函数
- Python按顺序读取文件夹中文件
参考资料: https://blog.csdn.net/qq_22227123/article/details/79903116 https://blog.csdn.net/merdy_xi/arti ...
- 使用torch实现RNN
(本文对https://blog.csdn.net/out_of_memory_error/article/details/81456501的结果进行了复现.) 在实验室的项目遇到了困难,弄不明白LS ...
- Flutter学习笔记(33)--GestureDetector手势识别
如需转载,请注明出处:Flutter学习笔记(33)--GestureDetector手势识别 这篇随笔主要记录的学习内容是GestureDetector手势识别,内容包括识别单击.双击.长按.组件拖 ...
- Cookie的简介与使用
Cookie 历来指就着牛奶一起吃的点心.然而,在因特网内,"Cookie"这个字有了完全不同的意思.那么"Cookie"到底是什么呢?"Cookie ...
- 39 _ 队列5 _ 循环队列需要几个参数来确定 及其含义的讲解.swf
上面讲解都是循环队列,如果是链表实现的话就很简单,队列只有循环队列才比较复杂 此时队列中只存储一个有效元素3,当在删除一个元素的时候,队列为空,pFont向上移动,pFont等于pRear,但是此时p ...