1077 Kuchiguse (20 point(s))
The Japanese language is notorious for its sentence ending particles. Personal preference of such particles can be considered as a reflection of the speaker's personality. Such a preference is called "Kuchiguse" and is often exaggerated artistically in Anime and Manga. For example, the artificial sentence ending particle "nyan~" is often used as a stereotype for characters with a cat-like personality:
-
Itai nyan~ (It hurts, nyan~)
-
Ninjin wa iyada nyan~ (I hate carrots, nyan~)
Now given a few lines spoken by the same character, can you find her Kuchiguse?
Input Specification:
Each input file contains one test case. For each case, the first line is an integer N (2≤N≤100). Following are N file lines of 0~256 (inclusive) characters in length, each representing a character's spoken line. The spoken lines are case sensitive.
Output Specification:
For each test case, print in one line the kuchiguse of the character, i.e., the longest common suffix of all N lines. If there is no such suffix, write nai
.
Sample Input 1:
3
Itai nyan~
Ninjin wa iyadanyan~
uhhh nyan~
Sample Output 1:
nyan~
Sample Input 2:
3
Itai!
Ninjinnwaiyada T_T
T_T
Sample Output 2:
nai
经验总结:
这一题,实际上就是求N个字符串的最长公共后缀,输入方面,可以使用读入优化,避免使用cin以及getline(),输出使用putchar()进行优化,先比较两个串求出其公共后缀,然后依次读入字符串,并与此公共后缀进行比较,如果公共后缀更短,则改变后缀长度即可,如果后缀长度为0,则直接判定无公共后缀~
AC代码
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
const int maxn=260;
char a[maxn],b[maxn],c[maxn];
void read(char a[],int &len)
{
len=0;
char x=getchar();
while(x!='\n')
{
a[len++]=x;
x=getchar();
}
}
int main()
{
int n,alen,blen,clen=0;
scanf("%d",&n);
getchar();
read(a,alen);
read(b,blen);
int i=alen-1,j=blen-1;
while(i>=0&&j>=0)
{
if(a[i]==b[j])
{
c[clen++]=a[i];
--i;--j;
}
else
break;
}
for(int k=2;k<n;++k)
{
read(a,alen);
for(int m=0;m<clen;++m)
{
if(c[m]!=a[alen-1-m])
{
clen=m;
break;
}
}
}
if(clen==0)
printf("nai\n");
else
{
for(int m=clen-1;m>=0;--m)
putchar(c[m]);
}
return 0;
}