CSU2087-迭代深搜dfs

版权声明:仅供研究,转载请注明出处。 https://blog.csdn.net/CSUstudent007/article/details/82623299

  思路:dfs,用vowel记录连续的元音字母,用consonant记录连续的辅音字母,深搜字符串的位置(str[i]的i),用cnt存悲剧词的个数,最后用T判断字符串中是否含'L'。

#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
string str;
long long int num;
void dfs(int i,long long int cnt,int T,int vowel,int consonant){
	if(vowel>=3||consonant>=3) return ;
	if(i>str.length()-1){
		if(T==1){
			num+=cnt;
		}
		return ;
	}
	if(str[i]!='_'){
		if(str[i]=='A'||str[i]=='E'||str[i]=='I'||str[i]=='O'||str[i]=='U'){
			dfs(i+1,cnt,T,vowel+1,0);
		}
		else if(str[i]=='L'){
			dfs(i+1,cnt,1,0,consonant+1);
		}
		else{
			dfs(i+1,cnt,T,0,consonant+1);
		}
	}
	else{
		dfs(i+1,cnt*5L,T,vowel+1,0);
		dfs(i+1,cnt*20L,T,0,consonant+1);
		dfs(i+1,cnt*1,1,0,consonant+1);
	}
}
int main(){
	while(cin>>str){
		num=0;
	dfs(0,1,0,0,0);
	cout<<num<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/CSUstudent007/article/details/82623299