LightOJ 1051 Good or Bad (递推DP)
2016-06-16 00:02
369 查看
题意
如果一个字符串含有连续的3个元音或者连续的5个辅音那么他就是bad的,否则他就是good的,字符串中含有’?’,’?’有可能是任何字母,如果因为问号不确定的话就是mix。思路
因为数据很小所以刚开始直接考虑模拟,但是问号的处理很麻烦,换成了dp的做法。dp的方程还是比较显然的,但是同样是mixed不太好判断。
dp[0/1][i][j]表示在i前第j个位时元音和辅音的情况,最后判断good即可。
代码
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <set> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; #define LL long long #define Lowbit(x) ((x)&(-x)) #define lson l, mid, rt << 1 #define rson mid + 1, r, rt << 1|1 #define MP(a, b) make_pair(a, b) const int INF = 0x3f3f3f3f; const int MOD = 1000000007; const int maxn = 1000 + 7; const double eps = 1e-8; const double PI = acos(-1.0); typedef pair<int, int> pii; char s[55]; int dp[2][55][10]; bool vow(char ch) { return (ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U'); } int solve() { int len = strlen(s + 1); memset(dp, 0, sizeof(dp)); dp[0][0][0] = dp[1][0][0] = 1; bool good = 0, bad = 0; for (int i = 1; i <= len; i++) { if (vow(s[i]) || s[i] == '?') { for (int j = 0; j < 2; j++) { dp[0][i][j+1] |= dp[0][i-1][j]; dp[1][i][0] |= dp[0][i-1][j]; } if (dp[0][i-1][2]) bad = 1; } if (!vow(s[i]) || s[i] == '?') { for (int j = 0; j < 4; j++) { dp[1][i][j+1] |= dp[1][i-1][j]; dp[0][i][0] |= dp[1][i-1][j]; } if (dp[1][i-1][4]) bad = 1; } } for (int i = 0; i < 6; i++) good |= (dp[0][len][i] | dp[1][len][i]); if (good && bad) return 3; if (good && !bad) return 1; if (!good && bad) return 2; } int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int T; scanf("%d", &T); for (int ncase = 1; ncase <= T; ncase++) { scanf("%s", s + 1); int flag = solve(); //1good 2bad 3mix printf("Case %d: ", ncase); if (flag == 1) puts("GOOD"); else if (flag == 2) puts("BAD"); else if (flag == 3) puts("MIXED"); } return 0; }
相关文章推荐
- 2016 Google hosts 持续更新【更新于:2016-06-15】
- Django学习笔记:为Model添加Action
- 如何压缩Golang 编译出的可执行文件大小
- Go 的基本类型有Basic types
- select golang
- goroutine
- Stringers golang
- golang的闭包和普通函数调用区别
- mongo-connector导入数据到Elasticsearch
- PyCharm中使用virtualenv进行django开发
- LaTex插入algorthim
- 关于go1.6使用vendor的坑
- windows下go编码转换问题
- golang 中AES加密详解
- Google 和 Facebook 如何大规模处理 IT 事件管理 —— 2016 SRE 大会之我见
- 提取django的orm使用
- [置顶] Google zxing实现二维码扫描完美解决方案
- Google 和 Facebook 如何大规模处理 IT 事件管理 —— 2016 SRE 大会之我见
- 【转】golang 文件操作 读写文件,上传文件,遍历文件,删除文件
- 关于captcha使用The _imagingft C module is not installed的错误处理