牛客-练习赛23-D

题目描述

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

猜你喜欢

转载自blog.csdn.net/s_h_w_s_n_g/article/details/81257288