牛客训练赛

托米没有完成上一个任务,准备施展黑魔法推倒 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;
}

猜你喜欢

转载自blog.csdn.net/qq_38570571/article/details/81255786