NO IMAGE
目錄

終曲

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 971    Accepted Submission(s): 273

Problem Description
最後的挑戰終於到了!
站在yifenfei和MM面前的只剩下邪惡的大魔王lemon一人了!戰勝他,yifenfei就能順利救出MM。
Yifenfei和魔王lemon的挑戰很簡單:由lemon給出三個字串,然後要yifenfei說出第一串的某個子串,要求該子串長度最小,並且同時包含第2個串和第3個串。
特別地,如果有多個這樣的子串,則請輸出字母序最小的一個。
 

Input
輸入資料首先是一個整數C,表示測試資料有C組;
接著是C組資料,每組包含三行字串,第一個字串長度大於1小於100
後面兩個串的長度大於1且小於10
 

Output
請對應每組輸入資料輸出滿足條件的最短子串;
如果沒有,請輸出 No
 

Sample Input
2
abcd
ab
bc
abc
ab
bd
 

Sample Output
abc
No
 
/*
轉載:
一組坑爹的資料:(蛋疼不理解)
zzzz
zz
zzz
zz
*/
#include <string>
#include <iostream>
#include <string.h>
#include <set>
using namespace std;
struct comp
{
bool operator()(const string &a ,const string & b)
{
if(a.length()==b.length())
return a.compare(b);
return a.length()<b.length();
}
};
int main()
{
int n,l1,l2,l3;
char s1[101],s2[11],s3[11],st[101],*p,*q;
set <string,comp>an;
string ss;
cin>> n;
while (n--)
{
cin >> s1>>s2>>s3;
l1=strlen(s1);
l2=strlen(s2);
l3=strlen(s3);
p=q=s1;
p=strstr(p,s2);
q=strstr(q,s3);
if(p && q)
{
while(p && q)
{
if(p<q)
{
strncpy(st,p,q-p l3);
st[q-p l3]='\0';
p=strstr(p 1,s2);
}
else
{
strncpy(st,q,p-q l2);
st[p-q l2]='\0';
q=strstr(q 1,s3);
}
ss=st;
an.insert(ss);
}
cout << *an.begin() << endl;
}
else
cout << "No" << endl;
an.clear();
}
return 0;
}

/*未ac程式碼,沒找到原因,~~~~(>_<)~~~~ */

#include<iostream>
using namespace std;
char *judge(char a[],char b[]){  //比較字串的大小
for(int i=0;i<strlen(b);i  ){
if(a[i]<b[i])
return a;
else
if(a[i]>b[i])
return b;
}
return b;
}
int main()
{
int t;
cin>>t;
getchar();
while(t--){
char a[1020],b[120],c[120],d[1020],m[1020];
memset(m,255,sizeof(m));
cin>>a>>b>>c;
int lena=strlen(a),i,j,min=100000;
for(i=0;i<lena;i  )	//列舉a[]的每個字串
for(j=0;j<lena;j  )
{
for(int k=i;k<=j;k  )
d[k-i]=a[k];
d[k-i]='\0';
if((strstr(d,b)!=NULL&&strstr(d,c)!=NULL)&&min>=strlen(d)){	//判斷b,c,是否是d[]的字串,去最小長度字串
min=strlen(d);
memcpy(m,judge(m,d),strlen(d) 1);	//去最小字串
}
}
if(min==100000)
cout<<"No"<<endl;
else
cout<<m<<endl;
}
return 0;
}