题目描述
托米没有完成上一个任务,准备施展黑魔法推倒 1317
黑魔法咒语被描述为一个 长为 n 的,仅包含小写英文字母 'a'...'i' 的字符串,在托米所在的星球,魔法造成的每次有效伤害都是来自他的一个子序列,对于每一个 'a'... 'i' 的排列(共 9! 种),若作为咒语的子序列出现, 就会造成 1 的伤害
而咒语的总伤害为所有 'a'... 'i' 的排列造成的伤害值之和,托米能打出多少点的伤害,是否能击败 1317 呢?
输入描述:
一行输入一个字符串 s
输出描述:
一行输出一个数,表示伤害值
示例1
输入
aabcdefghi
输出
1
备注:
|s| ≤ 3000
//暴力枚举
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char s[]={'a','b','c','d','e','f','g','h','i'};
char ss[3005];
int main()
{
scanf("%s",ss);
int sum=0;
int len=sizeof(ss);
do{
int k=0;
for(int i=0;i<len;i++)
{
if(s[k]==ss[i])
{
++k;
if(k==9)
{
sum++;
break;
}
}//这个括号改到上面就不对
}
}while(next_permutation(s,s+sizeof(s)));
printf("%d\n",sum);
}
全排列函数:next_permutation() 头文件#include<algorithm>.