ZOJ - 3818 Pretty Poem 暴力

来源:互联网 发布:医药gsp软件 编辑:程序博客网 时间:2024/06/05 10:45

题目大意:给出一个字符串,问这个字符串是不是"ABABA"或“ABABCAB”这种形式字符串。要求子字符串两两不相同

解题思路:因为字符串最长50,所以直接暴力

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define maxn 60char str[maxn], str2[maxn];int main() {int test;scanf("%d", &test);while(test--) {scanf("%s", str);int len = strlen(str);int cnt = 0;for(int i = 0; i < len; i++)if((str[i] >= 'A' && str[i] <= 'Z') || (str[i] <= 'z' && str[i] >= 'a'))str2[cnt++] = str[i];str2[cnt] = '\0';bool flag = false;int i , j, k, l;for(int A = 1; A < cnt; A++) {if( (cnt - 3 * A) <= 1)break;if( (cnt - 3 * A) % 2 != 0)continue;int B = (cnt - 3 * A) / 2;if(A == B) {for(i = 0; i < A; i++)if(str2[i] != str2[A+i])break;if(i == A)continue;}for(i = 0; i < A; i++)if( str2[i] == str2[i+A+B] && str2[i] == str2[i+A+B+A+B] )continue;elsebreak;if(i != A)continue;for(j = 0; j < B; j++)if(str2[A+j] == str2[A+B+A+j])continue;elsebreak;if(i == A && j == B) {flag = true;break;}}if(!flag) {for(int A = 1; A < cnt; A++) {if(cnt - 3 * A < 4)break;for(int B = 1; ; B++) {if((cnt - 3 * A - 3 * B) < 1)break;int C = cnt - 3 * A - 3 * B;if(A == B) {for(i = 0; i < A; i++)if(str2[i] != str2[A+i])break;if(i == A)continue;}if(A == C) {for(i = 0; i < A; i++)if(str2[i] != str2[2 * A + 2 * B + i])break;if(i == A)continue;}if(C == B) {for(i = 0; i < B; i++)if(str2[i+A] != str2[2*A +2 * B + i])break;if(i == B)continue;}int D = A + B;for(i = 0; i < D; i++)if(str2[i] == str2[i+D] && str2[i] == str2[cnt - D + i])continue;elsebreak;if(i == D) {flag = true;break;}}}}if(flag)printf("Yes\n");elseprintf("No\n");}return 0;}


0 0
原创粉丝点击