| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
求助谁能帮我看一下吗?我用DFS搜的,但一直哇!!!#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char a[201],b[201],c[401];
int la,lb,lc,t[300],f[300];
bool mark,flag,used[401];
void DFS(int x,int y)
{
int i,j,g;
if(y==la)
{
for(i=0,j=0;j<lc;j++)
if(used[j])
{
if(b[i]!=c[j])
break;
else
i++;
}
if(i==lb)flag=true;
return ;
}
for(i=x;i<lc;i++)
{
if(a[y]==c[i]&&used[i])
{
used[i]=false;
DFS(i+1,y+1);
if(flag)
return ;
used[i]=true;
}
}
}
int main()
{
int i,n,cas;
cin >> n;
for(cas=1;cas<=n;cas++)
{
cin >> a >> b >> c;
la = strlen(a);
lb = strlen(b);
lc = strlen(c);
if(lc!=(la + lb))
{
// cout << "Data set " << cas << ": no" << endl;
printf("Data set %d: no\n",cas);
continue;
}
memset(t,0,300);
memset(f,0,300);
mark=false;
for(i=0;i<la;i++)t[a[i]]++;
for(i=0;i<lb;i++)t[b[i]]++;
for(i=0;i<lc;i++)f[c[i]]++;
for(i=0;i<300;i++)
if(t[i]!=f[i])
{
mark=true;
break;
}
if(mark)
{
//cout << "Data set " << cas << ": no" << endl;
printf("Data set %d: no\n",cas);
continue;
}
memset(used,true,401);
flag = false;
/* for(i=0;i<lc-lb;i++)
{
DFS(i,0);
if(flag)break;
} */
DFS(0,0);
if(flag)
//cout << "Data set " << cas << ": yes" << endl;
printf("Data set %d: yes\n",cas);
else
//cout << "Data set " << cas << ": no" << endl;
printf("Data set %d: no\n",cas);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator