题意:
给出一个字符串;
判断这个字符串是不是押韵;
押韵的情况有两种"ABABA"和"ABABCAB";
像ni co ni co ni就是ABABA格式的;
还要求ABC不相同;
思路:
直接枚举ABC可能的长度,
暴力判断:
AC代码:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 50 + 10; char s[N], str[N]; char a[N], b[N]; int n, len; bool judge1(){ int flag; for(int i = 1; i < len; i++) { int j = len - i; flag = 0; if(i % 3 == 0 && j % 2 == 0) { int leni = i / 3; int lenj = j / 2; if(leni != lenj) flag = 1; if(leni == lenj) { for(int k = 0; k < leni; k++) { if(str[k] != str[k + leni]) { flag = 1; break; } } } if(!flag) continue; flag = 0; for(int k = 0; k < leni; k++) { if(str[k] != str[k + leni + lenj] || str[k] != str[k + 2 * leni + 2 * lenj]) { flag = 1; break; } } if(flag) continue; for(int k = 0; k < lenj; k++) { if(str[k + leni] != str[k + 2 * leni + lenj]) { flag = 1; break; } } if(flag) continue; return true; } } return false; } bool judge2() { int flag; for(int i = 1; i < len; i++) { int j = len - i; flag = 0; if(i % 3 == 0) { int leni = i / 3; int lenj = j; int lena, lenb; int flag1,flag2,flag3; for(int lena = 1; lena < leni; lena++) { flag1 = flag2 = flag3 = 0; lenb = leni - lena; if(lena != lenb) flag1 = 1; if(lena != lenj) flag2 = 1; if(lenb != lenj) flag3 = 1; if(lena == lenb) { for(int k = 0; k < lena; k++) { if(str[k] != str[k + lena]) { flag1 = 1; break; } } } if(lena == lenj) { for(int k = 0; k < lena; k++) { if(str[k] != str[k + 2 * leni]) { flag2 = 1; break; } } } if(lena == lenj) { for(int k = 0; k < lena; k++) { if(str[k + lena] != str[k + 2 * leni]) { flag3 = 1; break; } } } if(flag1 && flag2 && flag3) { flag = 1; break; } } if(!flag) continue; flag = 0; for(int k = 0; k < leni; k++) { if(str[k] != str[k + leni] || str[k] != str[k + 2 * leni + lenj]) { flag = 1; break; } } if(flag) continue; return true; } } return false; } int main() { int t; scanf("%d",&t); while(t--) { scanf("%s",s); int l = strlen(s); len = 0; for(int i = 0; i < l; i++) { if(s[i] >= 'a' && s[i] <= 'z' || s[i] >= 'A' && s[i] <= 'Z') str[len++] = s[i]; } str[len] = '\0'; if(judge1() || judge2()) printf("Yes\n"); else printf("No\n"); } }
时间: 2024-10-29 04:33:53