谷仓的安保

题意就是给你一串英文字母,要求前面比后面要小,还必须至少要有两个辅音,一个元音

这个就是组合型递归枚举的变形了

递归组合型枚举 - 小志61314 - 博客园 (cnblogs.com)看看自己的这个博客

#include<iostream>
#include<algorithm>
using namespace std;
const int N=20;
char p[N],v[N];
int yuan,fu;
int n,m;
void dfs(int u,int start)
{
    if(u>m)
    {
        if(yuan>=1&&fu>=2)
        {
            for(int i=1;i<=m;i++)
                cout<<p[i];
            cout<<endl;    
        }
        return ;
    }
    for(int i=start;i<=n;i++)
    {
        p[u]=v[i];
        if(v[i]=='a'||v[i]=='e'||v[i]=='i'||v[i]=='o'||v[i]=='u') yuan++;
        else fu++;
        dfs(u+1,i+1);
        if(v[i]=='a'||v[i]=='e'||v[i]=='i'||v[i]=='o'||v[i]=='u') yuan--;
        else fu--;
    }
}
int main(){
    cin>>m>>n;
    for(int i=1;i<=n;i++) cin>>v[i];
    sort(v+1,v+n+1);
    yuan=0,fu=0;
    dfs(1,1);
    return 0;
} 
/*
组合型枚举
保证后面的字典序>前面
还要保证至少一个元音,至少两个辅音 
*/

 

posted @ 2022-05-02 14:49  小志61314  阅读(188)  评论(0)    收藏  举报