ACM PKU 1455 Crazy tea party 逆序数 简单的数学题

ACM PKU 1455 Crazy tea party 逆序数 简单的数学题

http://acm.pku.edu.cn/JudgeOnline/problem?id=1455

如果所有人是线性排列,那我们的工作就是类似冒泡程序做的工作,,1,2,3,4,5变为5,4,3,2,1 ,耗时n(n-1)/2
但是出现了环,也就是说1,2,3,4,5变为3,2,1,5,4也可满足条件  
我们可以把这个环等分成两个部分 ,每个部分看成是线性的,再把它们花的时间加起来.
当n是偶数时, 每份人数n/2 ,即 (n/2-1)*(n/2)*2
当n是偶数时,两份的人数分别是n/2和n-n/2,即(n/2-1)*(n/2)+ ((n-n/2)-1)*(n-n/2)/2
适当化简,得到以下程序

Source

Problem Id:1455  User Id:lnmm
Memory:88K  Time:0MS
Language:C++  Result:Accepted

  • Source

 1 #include " iostream.h "
 2
 3 void  main()
 4 {
 5    int T;
 6    int n;
 7    int temp;
 8    int a,b;
 9    cin>>T;
10    while(T--)
11    {
12        cin>>n;
13        if(n%2==0)
14        {
15            temp=(n/2-1)*n/2;        
16        }

17        else 
18        {
19            a=n/2;
20            b=n-n/2;
21            temp=((a-1)*a+(b-1)*b)/2;
22
23        }

24        cout<<temp<<endl;
25
26    }

27}

你可能感兴趣的:(ACM PKU 1455 Crazy tea party 逆序数 简单的数学题)