题意:
给出一个 n,k;
接下来4*k行,每行一个字符串。
对于每行字符串,截取从后开始的第k个元音字母到最后为新的字符串。
四个新的字符串是否组成:"aabb","abba","abab","aaaa"的押韵方式
比较n个组成后的字符串,如果有"aabb"之后还有其他除“aaaa”之外的押韵方式,则输出no。
如果只有aaaa,则输出aaaa.
aaaa和任意字符串押韵方式输出后者。
#include <iostream> #include <cstdio> #include <algorithm> #include <string> #include <cmath> #include <cstring> #include <queue> #include <set> #include <vector> #include <stack> #include <map> #include <iomanip> #define PI acos(-1.0) #define Max 10005 #define inf 1<<28 #define LL(x) (x<<1) #define RR(x)(x<<1|1) using namespace std; char a[5][Max]; int key[5][Max]; int k; int judge(char x)//判断是否元音 { if(x=='a'||x=='e'||x=='i'||x=='o'||x=='u') return 1; return 0; } bool visit[10]; int check(char a[],char b[],char c[],char d[],int posa,int posb,int posc,int posd)//4个字符串比较后的新串 { int la=strlen(a),lb=strlen(b),lc=strlen(c),ld=strlen(d); string aa,bb,cc,dd; aa=a,bb=b,cc=c,dd=d; string aaa,bbb,ccc,ddd; aaa.assign(aa,key[posa][k],la-key[posa][k]); bbb.assign(bb,key[posb][k],lb-key[posb][k]); ccc.assign(cc,key[posc][k],lc-key[posc][k]); ddd.assign(dd,key[posd][k],ld-key[posd][k]); if(aaa==bbb&&bbb==ccc&&ccc==ddd)//aaaa return 1; else if(aaa==bbb&&aaa!=ccc&&ccc==ddd)//aabb return 2; else if(aaa==ccc&&bbb==ddd&&aaa!=bbb)//abab return 3; if(aaa==ddd&&bbb==ccc&&aaa!=bbb)//abba return 4; return 5;//NO } void out(int xx) { if(xx==2) cout<<"aabb"<<endl; else if(xx==3) cout<<"abab"<<endl; else if(xx==4) cout<<"abba"<<endl; } int main() { int i,j,l,n,m; while(scanf("%d%d",&n,&k)!=EOF) { memset(visit,0,sizeof(visit)); while(n--) { memset(key,0,sizeof(key)); for(i=1; i<=4; ++i) { scanf("%s",a[i]); l=strlen(a[i]); int num=1; for(j=l-1; j>=0; --j) { if(judge(a[i][j])) key[i][num++]=j;//记录元音出现的位置 } if(num<k+1)//如果字符串元音的个数小于k, 则输出NO visit[5]=1; } int xx=check(a[1],a[2],a[3],a[4],1,2,3,4); visit[xx]++; } int ok=0; for(i=2; i<=4; i++)//判断是否有2个或者以上的不同的押韵方式 for(j=i+1; j<=4; j++) if(visit[i]&&visit[j]) { ok=1; break; } if(visit[5]||ok) cout<<"NO"<<endl; else { ok=0; for(i=2; i<=4; i++) if(visit[i]) { out(i); ok=1; break; } if(!ok) cout<<"aaaa"<<endl; } } return 0; }