Codeforces 819B. Mister B and PR Shifts

xiaoxiao2021-02-28  92

B. Mister B and PR Shifts time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output Some time ago Mister B detected a strange signal from the space, which he started to study. After some transformation the signal turned out to be a permutation p of length n or its cyclic shift. For the further investigation Mister B need some basis, that's why he decided to choose cyclic shift of this permutation which has the minimum possible deviation. Let's define the deviation of a permutation p as . Find a cyclic shift of permutation p with minimum possible deviation. If there are multiple solutions, print any of them. Let's denote id k (0 ≤ k < n) of a cyclic shift of permutation p as the number of right shifts needed to reach this shift, for example: k = 0: shift p1, p2, ... pn, k = 1: shift pn, p1, ... pn - 1, ..., k = n - 1: shift p2, p3, ... pn, p1. Input First line contains single integer n (2 ≤ n ≤ 106) — the length of the permutation. The second line contains n space-separated integers p1, p2, ..., pn (1 ≤ pi ≤ n) — the elements of the permutation. It is guaranteed that all elements are distinct. Output Print two integers: the minimum deviation of cyclic shifts of permutation p and the id of such shift. If there are multiple solutions, print any of them. Examples input 3 1 2 3 output 0 0 input 3 2 3 1 output 0 1 input 3 3 2 1 output 2 1 Note In the first sample test the given permutation p is the identity permutation, that's why its deviation equals to 0, the shift id equals to 0 as well. In the second sample test the deviation of p equals to 4, the deviation of the 1-st cyclic shift (1, 2, 3) equals to 0, the deviation of the 2-nd cyclic shift (3, 1, 2) equals to 4, the optimal is the 1-st cyclic shift. In the third sample test the deviation of p equals to 4, the deviation of the 1-st cyclic shift (1, 3, 2) equals to 2, the deviation of the 2-nd cyclic shift (2, 1, 3) also equals to 2, so the optimal are both 1-st and 2-nd cyclic shifts.

pA:p[i]i<=0  B:p[i]i>02 p,A+1,B1 p, p[n]n<=0,A,p[n]pos=1,p[1...n1](A1)B ni=1(pii)=res,p:res=res+(A1)B+(p[n]n)+(p[n]1)

,AB: p[i]i>0,p[i]i,p[i]<=0 p[i]i<=0,p[i]i+n,p[i]>0<=0 c[i]=ni=1[(p[i]i+n)%n],i,p[1...n1],Ac[i]

,A=A1+c[i] B=nA

#include<stdio.h> #include<iostream> #include<string> #include<vector> #include<stdlib.h> #include<math.h> #include<string.h> #include<algorithm> #include<queue> #include<list> #define ll long long #define pii pair<int,int> #define MEM(a,x) memset(a,x,sizeof(a)) #define lowbit(x) ((x)&-(x)) using namespace std; const int inf=0x3f3f3f3f; const int N = 1e6+5; int n,p[2*N],c[N]; void slove(){ MEM(c,0); int a=0,b=0,resIdx=0; ll res=0; for(int i=1;i<=n;++i){ int idx=(p[i]-i+n)%n; ++c[idx]; res+=abs(p[i]-i); a+=p[i]<=i; b+=p[i]>i; } ll tRes=res; for(int i=1;i<n;++i){ int x=p[2*n-i+1]; tRes=tRes+(a-1)-b-(n-x)+(x-1); a=a-1+c[i]; b=n-a; if(res>tRes){ res=tRes; resIdx=i; } } printf("%I64d %d\n",res,resIdx); } int main() { //freopen("/home/lu/code/r.txt","r",stdin); while(~scanf("%d",&n)){ for(int i=1;i<=n;++i){ scanf("%d",&p[i]); p[n+i]=p[i]; } slove(); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-78324.html

最新回复(0)