链接:出太阳了
一条线上的n个人,123..n变为n..321,需要1+2+...+(n-1)=n*(n-1)/2次,即1右移n-1步,2右移n-2步..。而该题是围成一圈,所以可以双向移动, 因而将n分成两部分,n/2和n-n/2,两部分独自逆序。可以达到时间最少。例1234,可分成12和34,2分钟后可得到2143,由于成圈,所以也是逆序。
#include <iostream>
#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstdio>
using namespace std;
int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
int a = n / 2;
int b = n - a;
printf("%d\n", a*(a-1)/2+ b*(b-1)/2);
}
return 0;
}