龙岗区住房建设局网站,宣传册设计与制作免费,前端开发需要学什么语言,wordpress大学教程课件题意#xff1a;给定一个1-n的排序#xff0c;每次可以选定一个偶数长的序列#xff0c;然后交换前一部分和后一部分#xff0c;使得最后的成为1-n的序列。求最后的次数和每次的策略。 思路#xff1a;贪心。每次贪心的策略都是把i放到第i位置上#xff0c;交换的时候找到…
题意给定一个1-n的排序每次可以选定一个偶数长的序列然后交换前一部分和后一部分使得最后的成为1-n的序列。求最后的次数和每次的策略。 思路贪心。每次贪心的策略都是把i放到第i位置上交换的时候找到最小的交换序列是前半部分还是后半部分。 code
#include iostream
#include cstdio
#include cmath
#include algorithm
#include cstring
#include sstream
#include string
#include vector
#include list
#include queue
#include stack
#include map
#include set
#include bitsetusing namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;const int INF0x3fffffff;
const int inf-INF;
const int N1000000;
const int M10005;
const int mod1000000007;
const double piacos(-1.0);#define cls(x,c) memset(x,c,sizeof(x))
#define cpy(x,a) memcpy(x,a,sizeof(a))
#define fr(i,s,n) for (int is;in;i)
#define lson l,m,rt1
#define rson m1,r,rt1|1
#define lrt rt1
#define rrt rt1|1
#define middle int m(rl)1
#define lowbit(x) (x-x)
#define pii pairint,int
#define mk make_pair
#define IN freopen(in.txt,r,stdin);
#define OUT freopen(out.txt,w,stdout);int v[M],p[M];
int s[2*M5][2],len;int main()
{int T,n;scanf(%d,T);while (T--){scanf(%d,n);fr(i,1,n) scanf(%d,v[i]),p[v[i]]i;len0;fr(i,1,n)while (p[i]!i) //把i放到第i的位置上{int tmin(n-p[i]1,p[i]-i); //寻找最小的交换序列长度int mp[i],lp[i]-t,rp[i]t-1;s[len][0]l,s[len][1]r;fr(j,0,t-1) swap(v[lj],v[mj]),swap(p[v[lj]],p[v[mj]]);}printf(%d\n,len);fr(i,0,len-1) printf(%d %d\n,s[i][0],s[i][1]);}
}