hdu 1501 Zipper
2011-05-01 04:34
323 查看
//这道题的常规做法是深搜。我这种方法有点深搜的思想,优点是不需要N^2的标记数组,但是代码量有点大,可改进。
#include<iostream>
using namespace std;
char ch[2][205],ch3[405];
int len1,len2;
bool tangle(int i,int j,int k,int lasti,int lastj)
{
while(i<len1||j<len2)
{
if(ch[0][i]==ch3[k])
{
if(ch[1][j]==ch3[k]){
lasti=i++,lastj=j++,k++;
while(ch[0][i]==ch[1][j]&&ch[1][j]==ch3[k])
i++,j++,k++;
if(ch[0][i]==ch3[k])
{
if(tangle(i+1,lastj,k+1,lasti,lastj))
return true;
if(ch[0][lasti]==ch3[k])
i=lasti+1;
else
return 0;
}
else if(ch[1][j]==ch3[k]){
if(tangle(lasti,j+1,k+1,lasti,lastj))
return true;
if(ch[1][lastj]==ch3[k])
j=lastj+1;
else
return 0;
}
else
{
if(ch[0][lasti]==ch3[k]){
if(tangle(i,lastj+1,k+1,lasti,lastj))
return true;
i=lasti+1;
}
else
return 0;
}
}
else
i++;
}
else if(ch[1][j]==ch3[k])
{
++j;
}
else
return 0;
k++;
}
return 1;
}
int main()
{
int n,i,j,k,t,lasti,lastj,last;
cin>>n;
t=0;
while(n--)
{
scanf("%s%s%s",ch[0],ch[1],ch3);
lasti=lastj=0;
last=-1;i=0,j=0,k=0;
len1=strlen(ch[0]),len2=strlen(ch[1]);
if(!tangle(i,j,k,lasti,lastj))
cout<<"Data set "<<++t<<": no"<<endl;
else
cout<<"Data set "<<++t<<": yes"<<endl;
}
return 0;
}
#include<iostream>
using namespace std;
char ch[2][205],ch3[405];
int len1,len2;
bool tangle(int i,int j,int k,int lasti,int lastj)
{
while(i<len1||j<len2)
{
if(ch[0][i]==ch3[k])
{
if(ch[1][j]==ch3[k]){
lasti=i++,lastj=j++,k++;
while(ch[0][i]==ch[1][j]&&ch[1][j]==ch3[k])
i++,j++,k++;
if(ch[0][i]==ch3[k])
{
if(tangle(i+1,lastj,k+1,lasti,lastj))
return true;
if(ch[0][lasti]==ch3[k])
i=lasti+1;
else
return 0;
}
else if(ch[1][j]==ch3[k]){
if(tangle(lasti,j+1,k+1,lasti,lastj))
return true;
if(ch[1][lastj]==ch3[k])
j=lastj+1;
else
return 0;
}
else
{
if(ch[0][lasti]==ch3[k]){
if(tangle(i,lastj+1,k+1,lasti,lastj))
return true;
i=lasti+1;
}
else
return 0;
}
}
else
i++;
}
else if(ch[1][j]==ch3[k])
{
++j;
}
else
return 0;
k++;
}
return 1;
}
int main()
{
int n,i,j,k,t,lasti,lastj,last;
cin>>n;
t=0;
while(n--)
{
scanf("%s%s%s",ch[0],ch[1],ch3);
lasti=lastj=0;
last=-1;i=0,j=0,k=0;
len1=strlen(ch[0]),len2=strlen(ch[1]);
if(!tangle(i,j,k,lasti,lastj))
cout<<"Data set "<<++t<<": no"<<endl;
else
cout<<"Data set "<<++t<<": yes"<<endl;
}
return 0;
}
相关文章推荐
- hdu 1501 Zipper
- HDU 1501 Zipper(DFS)
- HDU-1501-Zipper
- Zipper hdu 1501
- hdu 1501 || poj 2192 Zipper(搜索:DFS)
- hdu 1501 Zipper
- hdu 1501 Zipper
- HDU-1501 Zipper
- HDU 1501 Zipper
- hdu 1501 Zipper--LCS
- hdu 1501 Zipper(dfs)
- HDU 1501 Zipper(Dfs记忆化搜索)
- HDU - 1501 Zipper
- Zipper(HDU 1501) —— DFS
- POJ 2192 && HDU 1501 Zipper (记忆化搜索)
- hdu 1501 Zipper dfs
- hdu 1501 Zipper (记忆优化搜索)
- hdu 1501 Zipper
- HDU 1501 Zipper(DFS)
- HDU 1501 Zipper【DP】