特长生模拟——门票
来源:互联网 发布:中华名人名篇网络 编辑:程序博客网 时间:2024/06/10 15:18
题目大意:
一个有效的密码由多个小写字母(‘a’…’z’)组成,至少有一个元音(‘a’, ‘e’, ‘i’,’o’ 或 ‘u’)和两个辅音(除去元音以外的音节),并且是按字母表顺序出现的(例如,’abc’是有效的,而’bac’不是) 。
现在给定一个期望长度L 和C 个小写字母,mxy想知道所有的长度为L、能由这给定的C个字母组成的有效密码。密码必须按字母表顺序打印出来,如果数量多于25000个,则告诉mxy前25000个有效密码,即使后面还存在有效密码。
3 <= L <= 15
1 <= C <= 26
保证只出现小写字母
题解:
直接就是一个搜索:
直接按字典序按顺序搜字母求组合。
注意一下:
1.判断元音辅音数量是否达标。
2.去重复
var a:array [0..16] of char; b:array ['a'..'z'] of longint; ans:array [0..25001] of string; flag:array [1..2] of longint; sum,i,j,n,m:longint; c:string;procedure dfs(dep:longint;o:char;now:string);var i:char;begin if dep>n then begin if now=ans[sum] then exit; if flag[1]=0 then exit; if flag[2]<2 then exit; inc(sum); ans[sum]:=now; if sum=25000 then begin for j:=1 to sum do writeln(ans[j]); close(input); close(output); halt; end; exit; end; for i:=o to 'z' do if b[i]>0 then begin if (i='a') or (i='e') or (i='i') or (i='o') or (i='u') then inc(flag[1]) else inc(flag[2]); dec(b[i]); dfs(dep+1,i,now+i); inc(b[i]); if (i='a') or (i='e') or (i='i') or (i='o') or (i='u') then dec(flag[1]) else dec(flag[2]); end;end;begin assign(input,'ticket.in'); reset(input); assign(output,'ticket.out'); rewrite(output); readln(n,m); readln(c); for i:=1 to length(c) do if c[i]<>' ' then b[c[i]]:=b[c[i]]+1; dfs(1,'a',''); for i:=1 to sum do writeln(ans[i]); close(input); close(output);end.
1 0
- 特长生模拟——门票
- 5.14特长生模拟 门票
- 特长生模拟——楼层
- 特长生模拟——朋友
- 特长生模拟——侦察兵
- 特长生模拟——遭遇战
- 特长生模拟——Array
- 特长生模拟——Biotech
- 特长生模拟——采药
- 特长生模拟——立体图
- 特长生模拟——买装备
- 特长生模拟——DNA排序
- 特长生模拟——八数码问题
- 门票(特长生准备)
- 5.14特长生模拟 朋友
- 十渡孤山寨—门票
- 特长生模拟 BIOtech(模拟)
- 5.14特长生模拟题 楼层
- (项目)AR电子书系统创新实训第一周(2)
- JavaScript使用
- linux 下查看文件的大小
- TCP和UDP的135、137、138、139、445端口的作用
- linux之路由知识之ip route 命令中的疑惑
- 特长生模拟——门票
- 算法提高 特殊的质数肋骨
- leetcode-28-匹配字符串位置(KMP)
- JavaScript数据类型(上)——基本数据类型
- 如何求解三次方程
- Spring Framework Reference Documentation翻译
- 【链表】
- 用c语言计算简单的递归问题
- JavaScript数据类型(下)——对象(引用)类型