这题感觉做法应该挺多吧,数据规模那么小。

我用DP乱搞了。。

dp0[i][j]表示字符串前i位能否组成末尾有连续j个元音字母

dp1[i][j]表示字符串前i位能否组成末尾有连续j个辅音字母

  • 我的转移方案是尽量不要出现BAD字符串。
  • 如果最后转移不过去那就说明一定会出现BAD字符串,如果可以转移到最后那就说明字符串可以出现GOOD的情况。
  • 另外,在转移过程中可以顺便得出字符串能不能出现BAD的情况。

转移写起来还挺棘手的。。

 #include<cstdio>
#include<cstring>
using namespace std;
bool vow(char ch){
return ch=='A'||ch=='E'||ch=='I'||ch=='O'||ch=='U';
}
bool d[][][];
int main(){
char str[];
int t;
scanf("%d",&t);
for(int cse=; cse<=t; ++cse){
scanf("%s",str+);
int n=strlen(str+);
memset(d,,sizeof(d));
d[][][]=d[][][]=;
bool bad=;
for(int i=; i<=n; ++i){
if(str[i]=='?' || vow(str[i])){
for(int j=; j<=; ++j){
if(d[][i-][j]){
d[][i][j+]=;
d[][i][]=;
}
}
if(d[][i-][]) bad=;
}
if(str[i]=='?' || !vow(str[i])){
for(int j=; j<=; ++j){
if(d[][i-][j]){
d[][i][j+]=;
d[][i][]=;
}
}
if(d[][i-][]) bad=;
}
}
bool good=;
for(int i=;i<;++i) good|=(d[][n][i]|d[][n][i]);
if(good && bad) printf("Case %d: MIXED\n",cse);
else if(good) printf("Case %d: GOOD\n",cse);
else printf("Case %d: BAD\n",cse);
}
return ;
}

最新文章

  1. AutoMapper(五)
  2. DBCP 配置备注
  3. 数据库中老师学生家长表添加自动同意好友自动(AgreeAddingFriend ),默认为True
  4. mysql学习(3)-linux下mysql主从复制
  5. 001淘淘商城项目:项目的Maven工程搭建
  6. TestLink学习四:TestLink1.9.13使用说明
  7. FileInputstream的available()方法
  8. SWOT分析法
  9. 【菜鸟入门】安装配置eclipse 并编写运行第一个Java程序
  10. os X下mds_stores占用大量cpu的解决办法
  11. 自动删除Android工程中无用的资源
  12. gulp的使用介绍及技巧
  13. linux内核中的const成员是否可以修改?
  14. 校园网ipv6连接问题
  15. LOJ#3093. 「BJOI2019」光线(递推+概率期望)
  16. shell wc命令 统计行数
  17. CSS学习摘要-盒子模型
  18. 20165203《Java程序设计》第七周Java学习总结
  19. 十几行代码带你用Python批量实现txt转xls,方便快捷
  20. UNDO自我理解总结

热门文章

  1. [HDU5015]233 Matrix
  2. hiho #1283 hiho密码 [Offer收割]编程练习赛3
  3. HDU 1505 City Game (hdu1506 dp二维加强版)
  4. 硬盘安装ubuntu注意事项
  5. shell 生成指定范围随机数与随机字符串 .
  6. 利用zabbix监控某个目录大小
  7. linux下proc里关于磁盘性能的参数
  8. 《转》常用Petri网模拟软件工具简介
  9. java Long的iniValue出错
  10. 在64位的linux上运行32位的程序