洛谷P1088 火星人【STL】【思维】

时间:2022-03-21 14:08:00

题目https://www.luogu.org/problemnew/show/P1088

题意:

给定一个n个数的排列,要求得到这之后的第m个排列。

思路:

next_permutation的简单应用。

题意本身是说找到m加上当前值之后在火星人的表示法里的数。

但是本身加减顺序是可换的,题意可以变换成当前的值之后的第m个

所以当前的排列之前的根本不需要管,只用从当前开始,跑m次next_permutation就可以了。

 #include<stdio.h>
#include<stdlib.h>
#include<map>
#include<set>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<queue> #define inf 0x7f7f7f7f
using namespace std;
typedef long long LL;
typedef pair<int, int> pr; int n, m;
const int maxn = ;
int num[maxn]; int main()
{
scanf("%d%d", &n, &m);
for(int i = ; i < n; i++){
scanf("%d", &num[i]);
}
while(m--){
next_permutation(num, num + n);
}
printf("%d", num[]);
for(int i = ; i < n; i++){
printf(" %d", num[i]);
}
printf("\n"); return ;
}