厦门理工学院oj 1107-牲口棚的安全

题目描述:

Time Limit:1000MS Memory Limit:65536K
Total Submit:211 Accepted:122

Description

农夫为他的牲口棚安装了一套新的安全系统。现在需要为牛群中的每头母牛设定一个有效的秘密。一个有效的密码由L(3 <= L <= 15)个不同的小写字母组成(即为传统的拉丁字符’a’…’z’),其中至少包含一个元音字母(‘a’, ‘e’, ‘i’, ‘o’, 或’u’)和至少两个辅音字母(非元音字母),而且字母必须按字母表顺序排列(如:‘abc’ 是有效密码; ‘bac’ 是无效密码)。

Input

第一行是两个整型数L和C( 3 <= L <= 15 )( L <= C <= 20 ),以空格间隔。
第二行是构成密码字符串的C个小写字母,以空格间隔。

Output

输出是一个长度为L的密码字符串(密码字符串中没有空格)。同时要求密码字符串必须按字母表的顺序依次输出。密码字符串之间以换行间隔。

Sample Input

4 6
a t c i s w
Sample Output

acis
acit
aciw
acst
acsw
actw
aist
aisw
aitw
astw
cist
cisw
citw
istw
Hint

四位密码从给定的六个字母中选出。

解题思路

这题我的思路为dfs,我们先对给出的c个字母进行排序,然后递归实现dfs暴力得出答案。dfs函数的主要作用就是递归列举出所有符合长度和顺序要求的字符串,再用check函数判断是否符合元音辅音字母的要求。符合所有要求的字符串则输出。我这里用state来标记状态,不会位运算的也可以用数组来标记状态,这样就可以知道哪个字母被用到了哪个没被用到。

代码

#include <iostream>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
set<char> yy;
int len;
bool check(string& str)//检查字符串是否符合少包含一个元音字母和两个辅音字母的要求
{int cnt1 = 0, cnt2 = 0,si=str.size();for (int i = 0; i < si; i++){if (yy.count(str[i]))cnt1++;elsecnt2++;}if (cnt1 < 1 || cnt2 < 2) return false;return true;
}
void dfs(int state, int start,int cnt, string& table)//state标记状态,start标记递归到的字母位置
{                                                    //cnt标记已经选择了的字母个数int si = table.size();if (cnt == len)                           //如果选择了的字母数量已经符合条件就判断并退出{int ind = 0;string ans="";while (state>0){if (state & 1)                  //用state的二进制数记录,1表示用到了这一位字母ans+= table[ind];ind++;state >>= 1;}if(check(ans)) cout << ans << endl;return;}if (start >= si)return;dfs(state | (1 << start), start + 1, cnt + 1, table); //先递归选择这一位字母的情况dfs(state, start + 1, cnt, table);                    //后递归未选择的情况
}
int main()
{yy.insert('a');                       //校oj的c++版本太低,所以set只能这样初始化,很丑yy.insert('e');                       //不会set也可以用数组暴力yy.insert('i');yy.insert('o');yy.insert('u');int l, c;cin >> l >> c;len = l;string table(c,0);for (int i = 0; i < c; i++)cin >> table[i];sort(table.begin(), table.end());dfs(0, 0, 0, table);return 0;
}

厦门理工学院oj 1107-牲口棚的安全相关推荐

  1. 厦门理工学院OJ题解(合集)

    把一些好玩的题目的题解放这里.有什么其他好玩题想看的评论或私信,我再写. 厦门理工学院OJ题解(1020:第三届程序设计大赛 搬果实) 厦门理工学院OJ题解(1139:秦心的面具) 厦门理工学院OJ题 ...

  2. 厦门理工学院OJ 1108.雾霾大作战 (最短路)

    Description 京津冀地区常发生雾霾,厦门人普遍感受不深.如今厦门有时也会发生雾霾,厦门市政府决定推行公共自行车来解决雾霾问题. 政府决定在厦禾路上设置了N 个自行车出租站1,2,-,N.市民 ...

  3. 厦门理工学院OJ题解(1139:秦心的面具)

    秦心由面具所转化而成的付丧神.因为本体总是木无表情,看上去就像一个三无少女.持有66个代表不同情绪的面具,通过这些面具可以表达出不同的感情.拥有操控感情程度的能力.秦心无意之中丢失了代表"希 ...

  4. 厦门理工学院OJ 1187.骑士精神 (dfs+剪枝)

    Description 像骑士的忠贞 不畏惧邪恶的眼神 这过程一直放在我心底就像 挡在你胸前的盔甲 保护着我让我心疼 骑士们发挥出你们的精神 就这样强悍的骑士撑到最后 骄傲的公主的要回家整装再出发. ...

  5. 厦门理工学院OJ题解(1226:英雄联盟)

    Description 相信很多人都玩过英雄联盟,身为一个优秀的召唤师,你需要能很好地补兵.假设你使用的是无极剑圣, 你只能对小兵使用普通攻击和阿尔法突袭,施放普通攻击和阿尔法突袭的时间都为 1 秒, ...

  6. 厦门理工学院OJ 1234.恐怖的奴隶主 (模拟)

    __M子__最近在玩一款叫做<炉石传说>的卡牌游戏,最经常使用的是以恐怖奴隶主为核心的战士套牌,该套牌经典打法有以下3种: 1.用恐怖奴隶主+旋风斩效果,铺场. 2.用战歌指挥官+恐怖奴隶 ...

  7. 厦门理工学院OJ 1139.秦心的面具 (bfs)

    Description 秦心由面具所转化而成的付丧神.因为本体总是木无表情,看上去就像一个三无少女.持有66个代表不同情绪的面具,通过这些面具可以表达出不同的感情.拥有操控感情程度的能力.秦心无意之中 ...

  8. 厦门理工学院计算机科学与技术专业,厦门理工学院计算机类(含计算机科学与技术、网络工程、空间信息与专业2016年在福建理科高考录取最低分数线...

    类似问题答案 2016年厦门理工学院计算机类(含计算机科学与技术.网络工程.空间信息与专业最低分... 学校 地 区 专业 年份 批次 类型 分数 厦门理工学院 福建 计算机类(含计算机科学与技术.网 ...

  9. 厦门理工学院2019年数据结构与算法考研初试大纲

    厦门理工学院2019年专业学位硕士研究生复试考试专业课课程考试大纲 一.考试科目名称:数据结构与算法 二.招生系部和专业: 考试要求: 要求考生能比较全面的理解与掌握数据结构的基本概念.基本原理和基本 ...

最新文章

  1. 【官方文档】Nginx负载均衡学习笔记(二)负载均衡基本概念介绍
  2. 大福利!Google机器学习零基础在线课程发布,免费!有中文版!
  3. 第一部分:TCL基本知识
  4. 【整理】MySQL 之 autocommit
  5. scanf( )函数的返回值
  6. WordPress作品设计素材图片站资讯文章教程uigreat主题
  7. javascript 解决IE8 兼容 placeholder 属性 含password
  8. ASP连接11种数据库的常用语法
  9. c语言中scanf输入判断,无法判断某一个输入的字符?scanf()
  10. 简述python中的内存管理机制_Python中的内存管理机制
  11. 微信小程序之设置背景图片
  12. CISCO Nexus 系列交换机配置命令
  13. 软件开发模型优点缺点
  14. 2020-12-11静态路由汇总实验
  15. 梯度下降与随机梯度下降
  16. 计算机网络人工智能论文,浅析计算机网络中人工智能的应用论文
  17. AcWing寒假每日一题
  18. 网络诈骗侦查公司41st Parameter获1300万美元投资 Kleiner Perkins参投
  19. 在DOS中格式化C盘,及在DOS下硬盘安装windows2003系统
  20. “请帮助另外10个人吧”——一个德国小孩的故事

热门文章

  1. 通常所说的微型计算机主机是指,通常所说的微型主机是指
  2. 909. 蛇梯棋-广度优先遍历
  3. 一文看懂文旅地产数字转型三大战略
  4. 曾经中国最伟大的语文教材
  5. n阶差分方程重根计算公式的一般证明
  6. 做一个音视频点播系统要多久?操作越简单越好
  7. LVI-SAM坐标系外参分析与代码修改,以适配各种数据集
  8. 计算机组成原理中LD,计算机组成原理课件第三章计算机中的数据表示.ppt
  9. python量化投资实战-股票实盘分析
  10. oracle访问控制策略查看,ORACLE 安全访问策略VPD与ORA-28132