托米没有完成上一个任务,准备施展黑魔法推倒 1317
黑魔法咒语被描述为一个 长为 n 的,仅包含小写英文字母 'a'...'i' 的字符串,在托米所在的星球,魔法造成的每次有效伤害都是来自他的一个子序列,对于每一个 'a'... 'i' 的排列(共 9! 种),若作为咒语的子序列出现, 就会造成 1 的伤害
而咒语的总伤害为所有 'a'... 'i' 的排列造成的伤害值之和,托米能打出多少点的伤害,是否能击败 1317 呢?
直接暴力全排列,比赛的时候一直超时,结果发现 败 在 i++ 上,原来 ++i 要比 i++效率高,
原因:https://blog.csdn.net/linuxdriverdeveloper/article/details/8767563
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[10]="abcdefghi";
char b[5000];
int sum=0;
cin>>b;
do{
int t=0,i=0;
while(t<9&&b[i])
{
if(a[t]==b[i])
{
++t;
++i;
}
else{
++i;
}
}if(t==9)
{
sum++;
}
}while(next_permutation(a,a+9));
cout<<sum;
}