2021.07.07【普及组】模拟赛C组比赛解析

本文详细解析了2021年7月7日【普及组】模拟赛C组的比赛题目,包括谷仓的安保、跳房子、卫星照片和统计蚂蚁等题目。解题思路涉及递归全排列、搜索算法如宽度优先搜索(BFS)和深度优先搜索(DFS),以及动态规划(DP)等技术。通过这些算法,可以解决字符串约束、递归计数和图像处理等问题。
摘要由CSDN通过智能技术生成

2021.07.07【普及组】模拟赛C组比赛解析

谷仓的安保(passwd)
题目描述
Farmer John给谷仓安装了一个新的安全系统,并且要给牛群中的每一个奶牛分配一个有效的密码。一个有效的密码由L(3 <= L <= 15)个小写字母(来自传统的拉丁字母集’a’…‘z’)组成,至少有一个元音(‘a’, ‘e’, ‘i’, ‘o’, 或 ‘u’)和两个辅音(除去元音以外的音节),并且是按字母表顺序出现的(例如,'abc’是有效的,而’bac’不是) 。给定一个期望长度L和C个小写字母,写一个程序,打印出所有的长度为L、能由这给定的C个字母组成的有效密码。密码必须按字母表顺序打印出来,一行一个。你的程序只需输出前25,000个有效密码,即使后面还存在有效密码。
解题思路
写一个递归+全排列,然后输出前先判断元音和辅音即可
局部代码

#include<bits/stdc++.h>
using namespace std;
int l,c,s;
char a[27],b[27],u[27];
void dg(int x,int z)
{
   
	if(x>l)
	{
   
		int s1,s2,y=0;
		s1=s2=0;
		for(int i=1;i<=l;i++)
		{
   
			if(b[i]=='a'||b[i]=='e'||b[i]=='i'||b[i]=='o'||b[i]=='u')
			{
   
				s1++;
			}
			else s2++;
			if(s1>=1&&s2>=2)
			{
   
				y++;
				break;
			}
		}
		if(y)
		{
   
			int k=1;
			for(int i=1;i<=l;i++)
			{
   
				if(b[i]!=u[i])
				{
   
					k=0;
					break;
				}
			}
			if(!k)
			{
   	
				s++;
				for(int i=1;i<=l;i++)
				{
   
					cout<<b[i];
				}
				cout<<endl;
				for(int i=1;i<=l;i++)
				{
   
					u[i]=b[i];
				}
			}
		}
		if(s>=25000)exit(0);
		return;
	}
	for(int i=z;i<=c+1;i++)
	{
   
			b[x+1]=a[i];
			dg(x+1,i+1);
			b[x+1]=0;
	}
}
int main()
{
   
	freopen("passwd.in"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值