zoj 1730

来源:互联网 发布:java 国际化资源文件 编辑:程序博客网 时间:2024/05/16 05:01

题意: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;
}

0 0
原创粉丝点击