洛谷 P1088 [NOIP 2004 普及组] 火星人

原题目传送门

用人话翻译原题目:求一个长度为n的数列进行m次全排列后的数列。

这道题目的第一眼,我靠!这TM不就是全排列吗?为甚么要用这么反人类的语言描述这个题目(CCF你们是不是和51区、火星人有染……还是您们的语文不好……反正就是很反人类就对了)
那当然,既然出题人这么搞,那么我们就以最简单的方式去解决它。
如果想要以最简单的方法去解决它,那么肯定会想到:STL大法好。因此,根据题目,感觉特别像全排列,那么我们就用next_permutation()函数吧。
由于这个代码过于简单,我就不解释每一个部分的具体作用(也不用注释)啦,反正会next_permutation()函数应该都看得懂。

说实话,这个题作为T4还是太简单了吧(只要您会STL的next_permutation()函数),否则还是要手动写全排列函数。当然,这个题目实在是太狗了,给您解释一大堆东西,结果读完题读了半个多小时发现就是一个长度为n的数列进行m次全排列后的结果。

上代码

#include<bits/stdc++.h>
#define size 100100
using namespace std;
int n,m,finger[size];
int main(){
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;++i){
        scanf("%d",&finger[i]);
    }
    for (int i=1;i<=m;++i){
        next_permutation(finger+1,finger+1+n);
    }
    for (int i=1;i<=n;++i){
        printf("%d ",finger[i]);
    }
    return 0;
}
posted @ 2021-12-29 20:41  煎饼Li  阅读(73)  评论(0编辑  收藏  举报