Codeforces Round #421 (Div. 2) D. Mister B and PR Shifts


题意:给一个长度为\(n\)的排列,每次可以向右循环移位一次,计算\(\sum_{i=1}^{n}|p_i - i|\)的最小值,并求最小值是在第几次移动时取到的。

思路:我们注意到对于每个\(p_i\),其位置都取遍了\(1-n\),那么可以分成\(p_i > i\) 和 $p_i <= i $两种

对于前者 每次移动贡献-1,后者贡献+1,而且我们可以容易计算出每次移动后这两者的数量,于是可以模拟\(O(n)\)了

#include<bits/stdc++.h>
#define P pair<int,int>
#define LL long long
using namespace std;
const int N = 1e6 + 10;
int n, p[N],cnt[N]; int main(){
cin>>n;
for(int i = 1;i <= n;i++) cin>>p[i];
int L = 0,R = 0;
LL res = 0,ans;
for(int i = 1;i <= n;i++){
res += abs(p[i] - i);
cnt[(p[i]-i+n)%n]++; ///移动x次变成p[i] <= i的个数
if(p[i] <= i) R++;
else L++;
}
ans = res;
int idx = 0;
for(int k = 1;k < n;k++){
res -= L; /// 左边的减少一
res += R - 1; ///右边的增加一,右端点除外
res += p[(n-k)%n+1] - n + p[(n-k)%n+1] - 1;///处理右端点
L -= cnt[k] - 1;
R += cnt[k] - 1;
if(res < ans){
idx = k,ans = res;
}
}
cout<<ans<<" "<<idx<<endl;
return 0;
}

Codeforces Round #421 (Div. 2) D. Mister B and PR Shifts的更多相关文章

  1. 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)的左 ...

  2. Codeforces Round #421 (Div. 2)B. Mister B and Angle in Polygon(模拟+精度控制)

    传送门 题意 给出正n多边形和一个数a,寻找与a最接近的角,输出角编号 分析 找出多边形上所有角,一一比对即可 trick 1.判断的时候注意精度,i.e.x-eps>0 2.double与do ...

  3. Codeforces Round #421 (Div. 1) (BC)

    1. 819B Mister B and PR Shifts 大意: 给定排列$p$, 定义排列$p$的特征值为$\sum |p_i-i|$, 可以循环右移任意位, 求最小特征值和对应移动次数. 右移 ...

  4. 【Codeforces Round #421 (Div. 2) B】Mister B and Angle in Polygon

    [题目链接]:http://codeforces.com/contest/820/problem/B [题意] 给你一个正n边形; 然后让你在这正n边行中选3个点,组成一个角; 找出角的大小和所给的角 ...

  5. 【Codeforces Round #421 (Div. 2) A】Mister B and Book Reading

    [题目链接]:http://codeforces.com/contest/820/problem/A [题意] 每天看书能看v页; 且这个v每天能增加a; 但是v有上限v1; 然后每天还必须往回看t页 ...

  6. Codeforces Round #421 (Div. 2) - B

    题目链接:http://codeforces.com/contest/820/problem/B 题意:给定一个正n边形,然后让你选择3个不同的顶点,使得这3个顶点形成的角度尽可能的接近a. 思路:首 ...

  7. Codeforces Round #421 (Div. 2) - A

    题目链接:http://codeforces.com/contest/820/problem/A 题意:一个人在看一本书,书一共C页,这个人每天看v0页,但是他又开始加速看这本书,每天都比前一天多看a ...

  8. Codeforces Round #421 (Div. 2)

    A: 题意:给你一本书共c页,第一天看v0页,第二天看v0+a,第二天看v0+2a以此类推,每天最多看v1页,但是后一天要重复看前一天的后l页. 代码: #include<stdio.h> ...

  9. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

随机推荐

  1. 第一次发干货Observable.zip与Observable.forkJoin

    在IT界已经混了5年了,5年中浏览了不少的网站,在上面查询自己想要的东西,解决工作中遇到的问题,心里总想有天自己能够有自己的博客,能给分享一些自己在生活中.工作中遇到的问题,让其他有类似经历的朋友能够 ...

  2. ES6初识-(冲突)数据结构

    Set的用法 元素不能重复--唯一性 WeakSet key值只能是对象 没有clear属性 Map let map=new Map([['a',123],['b',456]]);; WeakMap ...

  3. Json数据常用操作

    JSON字符串: var str1 = '{ "name": "cs", "sex": "man" }'; JSON对象 ...

  4. Delphi的Edit控件中只能输入数字且只能输入一个小数点

    使用这种功能必须使用 OnKeyPress 事件,该事件是在窗体中获得键盘输入的焦点,并且在用户按键时发生.OnKeyPress 事件中有个重要参数:Key.Key 参数为Char 型,它能够获得用户 ...

  5. mysql中列属性

    mysql列属性包括:NULL .default.comment.primary key.unique key 一.NULL定义方式:NULL(默认) NOT NULL 空属性有2个值,mysql数据 ...

  6. 红帽CentOS7 密码破解

    1.在启动的时候按住方向键停留在内核选项页面,在内核选项出按e键 2.进入到另一个页面后,寻找到以linux16开头的地方,按end到行后,输入空格,然后输入rd.break console=tty0 ...

  7. http协议组成(请求状态码)

    http请求由:请求行:消息报头:请求正文组成 //请求行 Request URL: http://172.32.4.33:8080/operation/v2/autoServer/queryAuto ...

  8. fastadmin 后台管理框架使用技巧(持续更新中)

    fastadmin 后台管理框架使用技巧(持续更新中) FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架,具体介绍,请查看文档,文档地址为:https://doc. ...

  9. Dialog BLE 学习之 修改分散加载文件 (2)

    最近搞Dialog的BLE SDK,发现空间不够了,询问原厂,得知可以通过调整分散加载文件而增加空间,一方面是有42KB+8KB的硬件基础,另一方面是原有的程序限制为38KB+8KB.故顺便学习了下把 ...

  10. 笔记-python-多环境-virtualenv

    笔记-python-多环境-virtualenv 1.      多环境 在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.6.4,所有第三方的包都会被pip安装到Pytho ...