题意:
给出一个 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;
}
理解题意很重要啊。。。