题意:N个人在一张桌子上,每分钟有一对邻居可以互换位置,问最少的时间使得所有人的左邻居变为右邻居,右邻居变为左邻居。
如果N个人是线性的,那就是冒泡排序的时间复杂度n*(n-1)/2;这道题目是环 相对于 1 2 3 4 5 3 2 1 5 4 也是一种合法的情况。那么只要把这个环分为两个部分,分别进行计算就可以了。讨论N为奇数和偶数的情况即可。
#include <stdio.h>
#include <string.h>
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
int ans=0;
if(n%2==0)
{
ans=2*(n/2)*(n/2-1)/2;
}
else
ans=(n/2)*(n/2-1)/2+(n/2+1)*(n/2)/2;
printf("%d\n",ans);
}
return 0;
}