[CF819B]Mister B and PR Shifts
题意:定义一个排列$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的更多相关文章
- CF819B Mister B and PR Shifts 题解
题目 Some time ago Mister B detected a strange signal from the space, which he started to study. After ...
- CF819B Mister B and PR Shifts 思维题
分析 这道题\(n\leq10^{6}\),显然\(n^{2}\)的暴力是无法解决问题的 那么我们可以考虑数列的某一种性质 因为最终的答案是\(\sum{n \atop i=1} |p_i - i|\ ...
- 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= ...
- D. Mister B and PR Shifts
;//开两倍空间 int n; arr p,cnt; int l,r,m; ll sum = ,ans; int main() { // file("test"); sdf(n); ...
- 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 820 D. Mister B and PR Shifts(思维)
题目链接:http://codeforces.com/contest/820/problem/D 题意:求.有一种操作 k = 0: shift p1, p2, ... pn, k = 1: shif ...
- 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 ...
- Mister B and PR Shifts,题解
题目链接 分析: 题意很明白,不再多说了,直接分析题目,首先想一想暴力,直接枚举起点,然后求出来,时间复杂度n*n,显然不太好,所以我们考虑换一种方法枚举,当然本质还是枚举,其实你会发现变化i次和i+ ...
随机推荐
- 如何获取iframe DOM的值
在Web开发时,很多时候会遇到一个问题.我在一个页面嵌入了iframe,并且我想获得这个iframe页面某个元素的值.那么该如何实现这个需求呢? 先来看下演示: 效果演示 iframe1中文本框的值: ...
- CSS样式权重的级联cascade的概念
我们知道,firefox在众多浏览器中是对css 2高度兼容的一款浏览器,那是我能够编写一个中型b2b网站的时候(并不能说是我遇到过的难题)在禅意花园中看到的一个案例,说的是某个菜单在css中定义了以 ...
- poj 1523 割点 tarjan
Description Consider the two networks shown below. Assuming that data moves around these networks on ...
- Google File System中文版
英文原文地址: Google File system 译文原文地址: The Google File System中文版 Google File System中文版 摘要 我们设计并实现了Google ...
- region xx not deployed on any region server
ERROR: Region { meta => month_hotstatic,860010-2288000000_201405_5_exit_00000047486,1400144486405 ...
- 计算1-1/x+1/x*x
// algo1-1.cpp 计算1-1/x+1/x*x. #include<stdio.h> #include<sys/timeb.h> void main() { time ...
- 【Foreign】无聊的计算姬 [Lucas][BSGS]
无聊的计算姬 Time Limit: 10 Sec Memory Limit: 256 MB Description Input Output Sample Input 6 2 2 3 4 3 2 ...
- [Codevs1519]过路费解题报告|最小生成树|LCA
在某个遥远的国家里,有 n个城市.编号为 1,2,3,…,n.这个国家的政府修建了m 条双向道路,每条道路连接着两个城市.政府规定从城市 S 到城市T需要收取的过路费为所经过城市之间道路长度的最大值. ...
- Git常用命令总结【转】
转自:http://www.cnblogs.com/mengdd/p/4153773.html 查看.添加.提交.删除.找回,重置修改文件 git help <command> # 显示c ...
- Kuangbin 带你飞-基础计算几何专题 题解
专题基本全都是模版应用.贴一下模版 平面最近点对 const double INF = 1e16; ; struct Point { int x,y; int type; }; double dist ...