LightOJ - 1051 Good or Bad(扫描)
2015-10-28 23:00
316 查看
题目大意:给你一个字符串,如果出现三个相邻的辅音字母,或者三个相邻的原音字母,这个字符串就是BAD的,反之就是good。字符串中有?,允许将?变成26个字母中的任意一个。如果字符串能变化成BAD和GOOD,那么就输出MIXED
解题思路:先不考虑?,看是否是BAD,如果是BAD就不用再考虑了
再考虑一下所有?变成原因和辅音的两种情况,看是否会变成BAD
最后考虑一下,是否永远都是BAD,如果不是永远都是BAD,就表示字符串可以变GOOD
判断是否永远是BAD,只要判断一下是否?无论怎么变都是bad就可以
解题思路:先不考虑?,看是否是BAD,如果是BAD就不用再考虑了
再考虑一下所有?变成原因和辅音的两种情况,看是否会变成BAD
最后考虑一下,是否永远都是BAD,如果不是永远都是BAD,就表示字符串可以变GOOD
判断是否永远是BAD,只要判断一下是否?无论怎么变都是bad就可以
#include <cstdio> #include <cstring> const int N = 60; char str ; int len, cas = 1; void init() { scanf("%s", str); len = strlen(str); } void solve() { int vow = 0, con = 0; bool bad = 0, good = 0, AllBad = 0; for (int i = 0; i < len; i++) { if (str[i] == 'A' || str[i] == 'E' || str[i] == 'I' || str[i] == 'O' || str[i] == 'U') { vow++; con = 0; } else if (str[i] == '?') { vow = 0; con = 0; } else { con++; vow = 0; } if (vow == 3 || con == 5) { AllBad = bad = 1; break; } } if (AllBad) { printf("Case %d: BAD\n", cas++); return ; } if (!bad) { vow = 0, con = 0; for (int i = 0; i < len; i++) { if (str[i] == 'A' || str[i] == 'E' || str[i] == 'I' || str[i] == 'O' || str[i] == 'U' || str[i] == '?') { vow++; con = 0; } else { vow = 0; con++; } if (vow == 3) { bad = true; break; } } } if (!bad) { vow = 0, con = 0; for (int i = 0; i < len; i++) { if (str[i] == 'A' || str[i] == 'E' || str[i] == 'I' || str[i] == 'O' || str[i] == 'U') { vow++; con = 0; } else { con++; vow = 0; } if (con == 5) { bad = true; break; } } } for (int i = 0; i < len; i++) { if (str[i] == '?') { int leftVow = 0, leftCon = 0, rightVow = 0, rightCon = 0; for (int j = i - 1; j >= 0; j--) { if (str[j] == '?') break; if (str[j] == 'A' || str[j] == 'E' || str[j] == 'I' || str[j] == 'O' || str[j] == 'U') { if (leftCon) break; leftVow++; } else { if (leftVow) break; leftCon++; } } for (int j = i + 1; j < len; j++) { if (str[j] == '?') break; if (str[j] == 'A' || str[j] == 'E' || str[j] == 'I' || str[j] == 'O' || str[j] == 'U') { if (rightCon) break; rightVow++; } else { if (rightVow) break; rightCon++; } } if ((leftVow == 2 && rightCon == 4 )|| (leftCon == 4 && rightVow == 2)) AllBad = 1; if (leftVow == 2 || rightVow == 2) str[i] = 'Q'; if (leftCon == 4 || rightCon == 4) str[i] = 'A'; if (AllBad) break; } } if (AllBad) printf("Case %d: BAD\n", cas++); else if (bad) printf("Case %d: MIXED\n", cas++); else if (!bad) printf("Case %d: GOOD\n", cas++); } int main() { int test; scanf("%d", &test); while (test--) { init(); solve(); } return 0; }
相关文章推荐
- 好用的类别Category
- django下video播放时间不能超过5s并且视频有时无法显示问题的解决方法
- 用Lingo求解线性规划问题
- Automated CMS category, version identification (CMS vulnerability detection)
- 最短路-SPFA(Shortest Path Faster Algorithm)
- 【CodeForces Yandex Algorithm 2011 D】【莫队分块】区间所有数值乘其数个数的平方
- 《转》---google面经
- django log问题
- 在Mac OS上安装Go语言编译器的方法
- Plugin(插件)和Goals(目标)
- lcd驱动。。解决开发板小企鹅logo跑偏问题
- 举例详解Go语言中os库的常用函数用法
- Django基础(2)编写你的第一个Django应用
- Algorithms—295.Find Median from Data Stream
- django自学
- Golang的os标准库中常用函数的整理介绍
- USB-OTG(on-the-go)
- 深入解析Go语言编程中slice切片结构
- boost之-lboost_system
- Django基础(1)概述