题解:B4457

共 182 字
1 分钟

分类讨论。

令 $pos1$ 为 $1$ 的位置,$posn$ 为 $n$ 的位置。

如果 $1$ 在左边,$n$ 在右边,即 $pos1 \le posn$,那就不会打架,直接各自换过去,答案为 $pos1+(n-1-posn)$。

如果 $1$ 在右边,$b$ 在左边,那中间会相互交换一次,就给我们省下了一步,答案为 $pos1+(n-1-posn)-1$。

code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#include<bits/stdc++.h>
using namespace std;
int main(){
    int pos1=0,posn=0,n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        int t;
        scanf("%d",&t);
        if(t==1)pos1=i;
        if(t==n)posn=i;
    }
    if(pos1<=posn)printf("%d",pos1+(n-1-posn));
    else printf("%d",pos1+(n-1-posn)-1);
}
Licensed under CC BY-NC-SA 4.0