AcWing 420. 火星人-c++
原题链接
中等
作者:
硬拉tom
,
2021-02-07 17:37:49
,
所有人可见
,
阅读 511
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=10010;
int a[N],n,m;
void swap(int i,int j){
int t=a[i];
a[i]=a[j];
a[j]=t;
}
void next(){//找比当前排列大的下一个排列
int idx=n-1;
while(idx>0 && a[idx-1]>a[idx]){//从后向前找第一个比左边大的下标id
idx--;
}
int t=idx-1,t1=idx;
for(int i=idx;i<n;i++){//找比id-1下标元素大的最小元素下标,并交换
if(a[t] < a[i] && a[t1]>a[i]){
t1=i;
}
}
swap(t,t1);
for(int i=idx,j=n-1;i<j;i++,j--){//id到最右边逆序
swap(i,j);
}
}
int main(){
cin >> n >> m;
for(int i=0;i<n;i++){
cin >> a[i];
}
while(m-->0)
next();
for(int i=0;i<n;i++)
cout << a[i] << " ";
return 0;
}