您的位置:首页 > 其它

蓝桥杯2017模拟题-排列序列

2017-03-23 00:51 190 查看


#include<iostream>
#define MAX 17
using namespace std;
int arr[MAX];
string str;
long long k=0;
void fun(){
arr[0]=1;//统计出17个字符全排列种类的个数
for(int i=1;i<MAX;i++)
arr[i]=arr[i-1]*i;
// 从第一个字符往后比,如果比后面的大,就相当于换了位置
// 因为初始的是:abcdef....是依次变大的
for(int i=0;i<MAX;i++){
int res=0;
for(int j=i;j<MAX;j++){
if(str[i]>str[j]){
res++;
k+=res*arr[MAX-i-1];
}
}
}
}
int main(){
cin>>str;
fun();
cout<<k<<endl;
return 0;
}


这道题如果强行用深搜的话,全排列太大,程序所需时间太久!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string namespace x
相关文章推荐