1.题目链接。其实这个题就是考察一个逆序数的性质,并且推广了。首先逆序数就是这样的数:i>j但是ai<aj.这样的一对i,j叫做一对逆序数。逆序数有很多应用,其实很重要的一个应用就是用来定义行列式的值。这个暂时先不说,其实两个相对序列的逆序数的总数是一定的。比如12345与54321他们的逆序数之和是C(5,2)。这里考的就是这样的问题,所以把12345转换成54321需要C(5,2)次,但是在圆上由于左右是对称的,我们可以分成两个部分,n/2与n-n/2.有人可能会粗心的认为就是两倍的n/2,其实并不是,因为n-n/2不一定等于n/2.嘻嘻,多注意这里的细节。代码很简单:
#include"stdafx.h"
#include<iostream>
#pragma warning(disable:4996)
#define ll long long
ll get(ll n)
{
return n * (n - 1) / 2;
}
int main()
{
int n;
while (~scanf("%d", &n))
{
ll res = get(n / 2) + get(n - n / 2);
printf("%lld\n", res);
}
}