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
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
}