zoukankan      html  css  js  c++  java
  • 【JZOJ2106】门票【dfs】

    题目大意:

    题目链接:https://jzoj.net/junior/#main/show/2106
    nn个互不相同的小写字母,按字典序输出前25000个满足”长度为mm,至少有1个元音字母和2个辅音字母“的字母串。


    思路:

    又是一道裸的爆搜题。。。
    将字母排序之后O(2n)O(2^n)搜索是否选择这个字母。选择mm个字母后判断是否有足够的元音和辅音字母即可。


    代码:

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    int n,m,tot;
    char ch[30],ans[30];
    bool flag;
    
    void dfs(int x,int s1,int s2)
    {
    	if (s1+s2>m) return;
    	if (x>n)
    	{
    		if (s1>0&&s2>1&&s1+s2==m)
    		{
    			for (int i=1;i<=m;i++) putchar(ans[i]);
    			putchar(10);
    			tot++;
    			if (tot==25000) flag=1;
    		}
    		return;
    	}
    	ans[s1+s2+1]=ch[x];
    	if (ch[x]=='a'||ch[x]=='e'||ch[x]=='i'||ch[x]=='o'||ch[x]=='u') dfs(x+1,s1+1,s2);
    		else dfs(x+1,s1,s2+1);
    	if (flag) return;
    	ans[s1+s2+1]='00';
    	dfs(x+1,s1,s2);
    	if (flag) return;
    }
    
    int main()
    {
    	scanf("%d%d",&m,&n);
    	for (int i=1;i<=n;i++)
    		cin>>ch[i];
    	sort(ch+1,ch+1+n);
    	dfs(1,0,0);
    	return 0;
    } 
    
  • 相关阅读:
    服务器切换
    闭包函数
    函数对象+嵌套
    lvs讲解
    了解python
    rang enumerate
    set-集合功能介绍
    元组-tuple功能介绍
    dict-字典功能介绍
    list-列表功能介绍
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998198.html
Copyright © 2011-2022 走看看