题解 P2524 【Uim的情人节礼物·其之弐】

引领天下

2017-05-24 13:17:34

Solution

思路: 用 STL 中的全排列函数 `prev_permutation`,不断求上一个字典序,同时累加; 如果求不了了,说明这就是第一个字典序,就可以输出了。 `prev_permutation` 用法: 函数的两个参数为内存中的一段连续空间的起点和终点,每次调用都将指定内存中的值修改为上一个字典序,如果当前排列已是第一个,返回“`false`”。 与之相对的,`next_permutation` 用于求下一个字典序。 AC 代码: ```cpp #include <bits/stdc++.h>//万能头文件 using namespace std;//流读入要的一句话 int n,ans;//n是个数,ans是答案 char a[15]; //由于输入没有“ ”,且n<=9,所以a[i]一定是一位数,用char才行 int main(void){ ios::sync_with_stdio(false);//流优化 cin>>n; for (int i=0;i<n;i++)cin>>a[i]; while (prev_permutation(a,a+n))ans++;//如果函数返回值为0,就会退出,不然不断求上一个字典序,ans同时累加 cout<<ans+1;//该顺序也算一个,所以ans要加1(ans是之前的字典序数量) } ```