uva1315 Crazy tea party(找规律)

题意就是说把顺时针排的1到n换成逆时针排的需要的最少交换步数。

如果是线形的一串数,需要的交换次数就是个冒泡排序的交换次数:n*(n-1)/2,或者用a[i]=(i-1)+a[i-1]推出来。

对于环形,切成两个线形就行了,通过观察规律知:越接*均切开越好。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<stack>
#include<queue>
#include<cctype>
#include<sstream>
using namespace std;
#define pii pair<int,int>
#define LL long long int
const double eps=1e-;
const int INF=;
const int maxn=+;
int T,n,ans,a[maxn];
int main()
{
//freopen("in1.txt","r",stdin);
//freopen("out.txt","w",stdout);
a[]=a[]=;
for(int i=;i<maxn;i++)
{
a[i]=(i-)+a[i-];
}
cin>>T;
while(T--)
{
scanf("%d",&n);
if(n==) cout<<<<endl;
else if(n==||n==) cout<<<<endl;
else
{
ans=a[n/]+a[(n-n/)/];
cout<<ans<<endl;
}
}
//fclose(stdin);
//fclose(stdout);
return ;
}
上一篇:[国嵌攻略][119][Linux中断处理程序设计]


下一篇:Shell函数语法