Luogu2524 Uim的情人节礼物

Posted shiina-rikka

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Luogu2524 Uim的情人节礼物相关的知识,希望对你有一定的参考价值。

STL 大法好

先来说一下这次要用到的函数吧:

prev_permutation (下一个全排列)

它的功能:

把两个迭代器(或指针)指定的部分看作一个序列,求出这些元素构成的全排列中,字典序排在上一个的排列,并且直接在序列上更新。另外,若不存在排名更靠前的序列,则返回false,否则返回true。同理,也有next_permutation函数。 --《算法竞赛 进阶指南》

那么,具体怎么用呢。for example:

 

while(prev_permutation(data+1,data+n+1))

只要有上一个全排列,它就会循环下去√

至于next_permutation(下一个全排列),使用和prev_permutation一样,在此就不赘述了。

现在来看这道题:

用prev_permutation找回去就好了呀!
上AC代码

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC target ("avx2")
//以上是玄学优化
#include<bits/stdc++.h>
using namespace std;
int n;
int data[10];
int ans;
inline void test()

    for(register int i = 1; i <= n; i++)
        cerr<<data[i]<<" ";
    cerr<<endl;

//调试使用的函数,可以忽视,不过看看过程总是好的;
int main()

    // freopen("testdata.in","r",stdin);
    std::ios::sync_with_stdio(false);
    //关同步,小程序懒得写快读;
    cin>>n;
    int x = 0;
    cin>>x;
    //这个读入是有坑的,因为读入是一个整型,所以需要转换到数组里;
    //当然可以用getchar()实现
    for(register int i = 1; i <= n;i++)
    
        data[i] = x % 10;
        x /= 10;
    
    //倒着找到每一位
    reverse(data+1,data+n+1);
    // STL 的翻转函数,倒转一个序列;
    while(prev_permutation(data+1,data+n+1))
        ans++/*test()*/;
    cout<<ans+1;
    //因为当前序列也算所以++;
    return 0;

 

以上是关于Luogu2524 Uim的情人节礼物的主要内容,如果未能解决你的问题,请参考以下文章

IDE以色列钻石中心情人节礼物已经为您备下

情人节有什么让人怦然心动的礼物?

运营给产品送的情人节礼物是?

烟花代码,情人节,情侣生日礼物代码适用

matlab生成情人节礼物

我是如何用一行代码表白学妹~❤520情人节送女朋友的3D樱花雨相册礼物❤~(程序员表白专属)