题目链接
把N分成差最小的两个部分,即偶数分为N/2和N/2,奇数分为N/2和N/2+1,然后每个部分内部用相邻两个数交换的方法计算所需要的步骤。
附上AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<set>
#include<vector>
#include<map>
#include<string>
#include<cmath>
#define pq priority_queue
#define Pi acos(-1.0)
#define MAXX 1000000007
using namespace std;
long long ans[66666];
int go(int x)
{
return x*(x+1)/2-x;
}
int main()
{
ans[1]=0;
int x;
for(int i=1;i<32768;i++)
{
ans[i]=go(i/2)+go(i-i/2);
}
int t;
cin>>t;
while(t--)
{
cin>>x;
cout<<ans[x]<<endl;
}
return 0;
}
Memory: 0 KB Time: 3 MS
Language: C++ 4.8.2 Result: Accepted
1386


&spm=1001.2101.3001.11974&articleId=51951639&d=1&t=3&u=104aaf70f6f14134b8b2ec710a7f0f4b)

被折叠的 条评论
为什么被折叠?



