洛谷-P2524 Uim的情人节礼物·其之弐

题目描述
前传:详见洛谷P2525

Uim成功地按照顺序将礼物送到了N个妹子的手里并维持她们的和谐。

Uim现在想知道,他最终选择的顺序是所有给N个妹子送礼顺序中、字典序第几小的。

输入格式
第一行一个整数N,表示有N个数。

第二行一个整数X,表示给出的排列。

输出格式
一个整数,表示是第几小的字典序。

输入输出样例
输入 #1 复制
3
231
输出 #1 复制
4
说明/提示
1<=N<=9

输入的排列没有空格


思路:next_permutation设计下一个全排列,利用这个函数,设计一个新的数组从{1,2,……n}开始到{a1,a2,……an}。当新的数组和输入的数组相同,输出。

#include<bits/stdc++.h>
using namespace std;
bool cmp(int *a,int *b,int n)
{
    for(int i = 0;i < n;i++)    //一个一个比较两个数组是否相同
        if(a[i] != b[i]) return false;
    return true;
}
int main()
{
    int n,a[10000],b[10000],s = 1;
    scanf("%d",&n);    //读入n
    for(int i = 0;i < n;i++)
        scanf("%1d",&a[i]);    //读入数组a
    for(int i = 0;i < n;i++)
        b[i] = i+1;    //b数组值为{1~n}
    while(!cmp(a,b,n))    //如果两个数组不相同
    {
        next_permutation(b,b+n);   //制造下一个全排列
        s++;    //计数
    }
    cout << s << endl;    //输出答案
    return 0;
}
发布了430 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zqhf123/article/details/105455451