FIX_前缀后缀_未提交
问题 B: FIX
时间限制: 1 Sec 内存限制: 64 MB提交: 38 解决: 11
[提交][状态][讨论版]
题目描述
如果单词 X 由单词 Y 的前若干个字母构成,我们称 X 是 Y 的前缀,例如“c”、“ca”、“cat”是单词“cat”的前缀;类似地如果单词 X 由单词 Y 的最后若干个字母构成,我们称 X 是 Y的后缀,例如“t”、“at”、“cat”是单词“cat”的后缀。请你编一程序判断一组单词是否满足任一单词都不是其它单词的前缀且任一单词都不是其它单词的后缀。
输入
共有 3N+1 行,其中第一行包含一个正整数 N(N<=10),表示要你作出判断的单词总组数,每组单词有三个。接下来的 3N 行每行一个单词,每个单词长度不超过 255。
输出
共有 N 行,每行输出一个“Yes”或“No”,表示对相应的三个单词给出的判断结果,满足条件输出“Yes”,不满足条件输出“No”。
样例输入
2
abba
aab
bab
a
ab
aa
样例输出
Yes
No
#include <iostream> #include <cstdio> #include <cstring> using namespace std; void revers(char s[],int len){ int c,j,i; for(int i=0,j=len-1;i<j;i++,j--){ s[i]^=s[j]; s[j]^=s[i]; s[i]^=s[j]; } } int main() { int n; char a[3000]; char b[3000]; char c[3000]; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%s",a); scanf("%s",b); scanf("%s",c); int t4=0,t5=0; int lena=strlen(a); int lenb=strlen(b); int lenc=strlen(c); int l=0; int t1=0,t2=0,t3=0; int bbb=0; for(int j=0;j<3;j++){ if(j==0){ int l=0; int cou=0; while(a[cou]!='\0'&&b[cou]!='\0'){ if(a[cou]==b[cou]){ l++; } cou++; } if(l==lena){ printf("No\n"); bbb=1; break; } l=0; cou=0; while(a[cou]!='\0'&&c[cou]!='\0'){ if(a[cou]==c[cou]){ l++; } cou++; } if(l==lenc){ printf("No\n"); bbb=1; break; } t1=1; } if(j==1){ int l=0; int cou=0; while(b[cou]!='\0'&&a[cou]!='\0'){ if(b[cou]==a[cou]){ l++; } cou++; } if(l==lenb){ printf("No\n"); bbb=1; break; } l=0; cou=0; while(b[cou]!='\0'&&c[cou]!='\0'){ if(b[cou]==c[cou]){ l++; } cou++; } if(l==lenb){ printf("No\n"); bbb=1; break; } t2=1; } if(j==2){ int l=0; int cou=0; while(c[cou]!='\0'&&a[cou]!='\0'){ if(c[cou]==a[cou]){ l++; } cou++; } if(l==lenc){ printf("No\n"); bbb=1; break; } l=0; cou=0; while(c[cou]!='\0'&&b[cou]!='\0'){ if(c[cou]==b[cou]){ l++; } cou++; } if(l==lenc){ printf("No\n"); bbb=1; break; } t3=1; } if(t1==1&&t2==1&&t3==1){ t4=1; t1=0; t2=0; t3=0; } } if(bbb==1){ bbb=0; continue; } revers(a,lena); revers(b,lenb); revers(c,lenc); //printf("%s\n",a); //printf("%s\n",b); //printf("%s\n",c); l=0; t1=0; t2=0; t3=0; bbb=0; for(int j=0;j<3;j++){ if(j==0){ int l=0; int cou=0; while(a[cou]!='\0'&&b[cou]!='\0'){ if(a[cou]==b[cou]){ l++; } cou++; } if(l==lena){ printf("No\n"); bbb=1; break; } l=0; cou=0; while(a[cou]!='\0'&&c[cou]!='\0'){ if(a[cou]==c[cou]){ l++; } cou++; } if(l==lenc){ printf("No\n"); bbb=1; break; } t1=1; } if(j==1){ int l=0; int cou=0; while(b[cou]!='\0'&&a[cou]!='\0'){ if(b[cou]==a[cou]){ l++; } cou++; } if(l==lenb){ printf("No\n"); bbb=1; break; } l=0; cou=0; while(b[cou]!='\0'&&c[cou]!='\0'){ if(b[cou]==c[cou]){ l++; } cou++; } if(l==lenb){ printf("No\n"); bbb=1; break; } t2=1; } if(j==2){ int l=0; int cou=0; while(c[cou]!='\0'&&a[cou]!='\0'){ if(c[cou]==a[cou]){ l++; } cou++; } if(l==lenc){ printf("No\n"); bbb=1; break; } l=0; cou=0; while(c[cou]!='\0'&&b[cou]!='\0'){ if(c[cou]==b[cou]){ l++; } cou++; } if(l==lenc){ printf("No\n"); bbb=1; break; } t3=1; } if(t1==1&&t2==1&&t3==1){ t5=1; t1=0; t2=0; t3=0; } } if(bbb==1){ bbb=0; continue; } if(t4==1||t5==1){ printf("Yes\n"); t4=0; t5=0; continue; } } return 0; }