题意:定义一个排列$p_{1\cdots n}$的“偏移量”$D=\sum _{i=1}^n\left|p_i-i\right|$

求它所有的轮换排列中偏移量最小的是多少,要求输出轮换序数

暴力就是求出每个轮换排列然后计算$D$,我们不妨换个视角,看看如何计算每个$p_k$对不同排列的$D$的贡献

设$d_i$是轮换序数为$i$的轮换排列的偏移量(轮换从右往左),当前处理到$p_k$

#1若$p_k\geq k$

对$0\leq i\leq k-1$,贡献为$p_k-k+i$

对$k\leq i\leq k+n-p_k$,贡献为$n+k-p_k-i$

对$k+n-p_k+1\leq i\leq n-1$,贡献为$p_k-n-k+i$

#2若$p_k\lt k$

对$0\leq i\leq k-p_k-1$,贡献为$k-p_k-i$

对$k-p_k\leq i\leq k-1$,贡献为$p_k-k+i$

对$k\leq i\leq n-1$,贡献为$n+k-p_k-i$

区间加和,还带关于$i$的线性的项,直接打两个标记(常数,$i$的系数),最后扫一遍即可

#include<stdio.h>
#define ll long long
int p[2000010];
ll dc[4000010],dx[4000010];
ll min(ll a,ll b){return a<b?a:b;}
int main(){
	int n,i,pos;
	ll del,cnt,ans;
	scanf("%d",&n);
	for(i=1;i<=n;i++)scanf("%d",p+i);
	for(i=1;i<=n;i++){
		if(p[i]>=i){
			dc[0]+=(p[i]-i);
			dc[i]-=(p[i]-i);
			dx[0]++;
			dx[i]--;
			dc[i]+=(n+i-p[i]);
			dc[i+n-p[i]+1]-=(n+i-p[i]);
			dx[i]--;
			dx[i+n-p[i]+1]++;
			if(i+n-p[i]+1<=n-1){
				dc[i+n-p[i]+1]+=(p[i]-n-i);
				dx[i+n-p[i]+1]++;
			}
		}else{
			dc[0]+=(i-p[i]);
			dc[i-p[i]]-=(i-p[i]);
			dx[0]--;
			dx[i-p[i]]++;
			dc[i-p[i]]+=(p[i]-i);
			dc[i]-=(p[i]-i);
			dx[i-p[i]]++;
			dx[i]--;
			if(i<=n-1){
				dc[i]+=(n+i-p[i]);
				dx[i]--;
			}
		}
	}
	del=cnt=0;
	ans=9223372036854775807ll;
	for(i=0;i<n;i++){
		del+=dx[i];
		cnt+=dc[i];
		if(cnt+i*del<ans){
			ans=cnt+i*del;
			pos=i;
		}
	}
	printf("%I64d ",ans);
	if(pos==0)
		putchar('0');
	else
		printf("%d",n-pos);
}

[CF819B]Mister B and PR Shifts的更多相关文章

  1. CF819B Mister B and PR Shifts 题解

    题目 Some time ago Mister B detected a strange signal from the space, which he started to study. After ...

  2. CF819B Mister B and PR Shifts 思维题

    分析 这道题\(n\leq10^{6}\),显然\(n^{2}\)的暴力是无法解决问题的 那么我们可以考虑数列的某一种性质 因为最终的答案是\(\sum{n \atop i=1} |p_i - i|\ ...

  3. 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= ...

  4. D. Mister B and PR Shifts

    ;//开两倍空间 int n; arr p,cnt; int l,r,m; ll sum = ,ans; int main() { // file("test"); sdf(n); ...

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

  6. codeforces 820 D. Mister B and PR Shifts(思维)

    题目链接:http://codeforces.com/contest/820/problem/D 题意:求.有一种操作 k = 0: shift p1, p2, ... pn, k = 1: shif ...

  7. codeforces 819B - Mister B and PR Shifts(思维)

    原题链接:http://codeforces.com/problemset/problem/819/B 题意:把一个数列整体往右移k位(大于n位置的数移动到数列前端,循环滚动),定义该数列的“偏差值” ...

  8. CF820D Mister B and PR Shifts

    题目链接:http://codeforces.com/problemset/problem/820/D 题目大意: 给出一个\(n\)元素数组\(p[]\),定义数组\(p[]\)的误差值为\(\su ...

  9. Mister B and PR Shifts,题解

    题目链接 分析: 题意很明白,不再多说了,直接分析题目,首先想一想暴力,直接枚举起点,然后求出来,时间复杂度n*n,显然不太好,所以我们考虑换一种方法枚举,当然本质还是枚举,其实你会发现变化i次和i+ ...

随机推荐

  1. 【翻译】为什么Java中的String不可变

    笔主前言: 众所周知,String是Java的JDK中最重要的基础类之一,在笔主心中的地位已经等同于int.boolean等基础数据类型,是超越了一般Object引用类型的高端大气上档次的存在. 但是 ...

  2. [NOI2002] 银河英雄传说 (带权并查集)

    题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶 ...

  3. Educational Codeforces Round 55:B. Vova and Trophies

    B. Vova and Trophies 题目链接:https://codeforc.es/contest/1082/problem/B 题意: 给出一个“GS”串,有一次交换两个字母的机会,问最大的 ...

  4. SpringMVC学习 -- @RequestParam , @RequestHeader , @CookieValue 的使用

    使用 @RequestParam 绑定请求参数值: value:参数名 , 仅有一个 value 属性时 , value 可以省略不写. required:是否必须.默认为 true , 表示请求参数 ...

  5. [01]url请求到渲染

    http状态码有哪些?分别表示什么意思?状态码告知从服务器返回的请求结果.2XX表明请求被正常处理了.200OK.204No Content(服务器接收的请求已经处理成功,但在返回的响应报文中不包含实 ...

  6. linux编译动态库 fPIC作用

    在生成动态库时,常常习惯性的加上fPIC选项,fPIC有什么作用和意义,加不加有什么区别,这里做下小结: fPIC的全称是 Position Independent Code, 用于生成位置无关代码. ...

  7. HDFS 的Trash回收站

    1)在core-site.xml文件中添加这个配置 在每个节点(不仅仅是主节点)上添加配置 core-site.xml,增加如下内容 <property> <name>fs.t ...

  8. 【Foreign】树 [prufer编码][DP]

    树 Time Limit: 10 Sec  Memory Limit: 256 MB Description Input Output Sample Input 3 2 2 1 Sample Outp ...

  9. Mysql添加视图

    有时候复杂的查询需要创建视图,可以简化查询.我们也可以将视图包装成对象,这样查询后在Java中也可以直接封装为对象. 原来的表结构

  10. Spark优化之一:分布式下的map操作是闭包

    例如对一个JavaPairRDD<String, String>做遍历操作,常见的,我们可以通过先通过collect()操作将它转化为Map对象再进行遍历,也可以使用Spark提供的map ...