谷仓的安保
题意就是给你一串英文字母,要求前面比后面要小,还必须至少要有两个辅音,一个元音
这个就是组合型递归枚举的变形了
递归组合型枚举 - 小志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; } /* 组合型枚举 保证后面的字典序>前面 还要保证至少一个元音,至少两个辅音 */
浙公网安备 33010602011771号