Codeforces 1256B Minimize the Permutation

思路:

贪心算法,每次找能移动的最小的数字往前移

代码:

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> p;
typedef long long ll;
#define isOp(x,y) ((x^y)<0)
#define m_p(a,b) make_pair(a,b)
#define p_b(a) push_back(a)
#define rp(i,n) for(int i=0;i<n;i++)
#define rpn(i,n) for(int i=1;i<=n;i++)
#define l_b(a,n,x) lower_bound(a,a+n,x)-a
#define u_b(a,n,x) upper_bound(a,a+n,x)-a
const int MAX_N=105;
bool op[MAX_N];//是否移动过 
int arr[MAX_N];
int main(){
	int q;
	cin>>q;
	rp(i,q){
		int n;
		cin>>n;
		memset(arr,0,sizeof(arr));
		memset(op,false,sizeof(op));
		rp(j,n) cin>>arr[j];
		rpn(j,n-1){
			int pos=0;
			while(arr[pos]!=j) pos++;
			while(pos&&!op[pos-1]){
				if(arr[pos-1]<arr[pos]) break;
				swap(arr[pos],arr[pos-1]);
				op[pos-1]=true;
				pos--;
			}
		}
		cout<<arr[0];
		for(int i=1;i<n;i++) cout<<' '<<arr[i];
		putchar('
');
	}
	return 0;
}
原文地址:https://www.cnblogs.com/yuhan-blog/p/12308905.html