Ranking (as of 2013-01-19): 1050
Language: C++
/* UVa 384 - Slurpys To build using Visucal Studio 2008: cl -EHsc -O2 UVa_384_Slurpys.cpp */ #include <cstdio> #include <cstring> int is_slump(const char* s, int i, int length) { int si = i; if (i >= length || s[i] != 'D' && s[i] != 'E') return -1; if (++i == length || s[i] != 'F') return -1; for (i++; i < length; i++) if (s[i] != 'F') break; if (i == length) return -1; else if (s[i] == 'G') return i - si + 1; else { int slump_length = is_slump(s, i, length); return (slump_length > 0) ? i + slump_length - si : -1; } } int is_slimp(const char* s, int i, int length) { int si = i; if (i >= length || s[i] != 'A') return -1; if (++i == length) return -1; else if (s[i] == 'H') return 2; else if (s[i] == 'B') { int slimp_length = is_slimp(s, ++i, length); return (slimp_length > 0 && i + slimp_length < length && s[i + slimp_length] == 'C') ? i + slimp_length - si + 1 : -1; } else { int slump_length = is_slump(s, i, length); return (slump_length > 0 && i + slump_length < length && s[i + slump_length] == 'C') ? i + slump_length - si + 1 : -1; } } bool is_slurpys(const char* s) { int length = strlen(s); int slimp_length = is_slimp(s, 0, length); if (slimp_length > 0) { int slump_length = is_slump(s, slimp_length, length); return (slimp_length + slump_length == length) ? true : false; } else return false; } int main() { int n; scanf("%d", &n); printf("SLURPYS OUTPUT\n"); while (n--) { const int nr_chars_max = 60; char s[nr_chars_max + 1]; scanf("%s", s); printf("%s\n", ((is_slurpys(s)) ? "YES" : "NO")); } printf("END OF OUTPUT\n"); return 0; }
No comments:
Post a Comment