| ||||||||||
| 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 | |||||||||
贴我longlong长的暴搜,0ms#include "iostream"
#include "string"
using namespace std;
char s[21];
char rs[300][21];
int used[20];
int start;
int len;
class stack
{
public:
char ss[21];
int top;
stack()
{
top=0;
}
void push(char c)
{
ss[top++]=c;
}
void pop()
{
top--;
}
void print()
{
for(int i=0;i<top;i++)
cout<<ss[i];
cout<<endl;
}
int find(char c)
{
int num=0;
for(int i=0;i<top;i++)
if(ss[i]==c)
num++;
return num;
}
};
class Node
{
public:
char a;
char b;
Node* next;
Node(char c,char d)
{
a=c;
b=d;
next=NULL;
}
Node()
{
next=NULL;
}
};
class hash
{
public:
Node table[50];
hash()
{
for(int i=0;i<50;i++)
table[i]=Node();
}
int addr(Node m)
{
return m.b-'a';
}
int addr2(char c)
{
return c-'a';
}
void add(Node m)
{
int ar=addr(m);
Node* p=table[ar].next;
if(p==NULL)
table[ar].next=new Node(m.a,m.b);
else
{
while(p->next!=NULL)
{
p=p->next;
}
p->next=new Node(m.a,m.b);
}
}
bool find2(char c)
{
int ar=addr2(c);
Node* p=table[ar].next;
while(p!=NULL)
{
if(p->b==c)
return 1;
p=p->next;
}
return 0;
}
bool find(Node m)
{
int ar=addr(m);
Node* p=table[ar].next;
while(p!=NULL)
{
if(p->b==m.b&&p->a==m.a)
return 1;
p=p->next;
}
return 0;
}
};
void dfs(int now,stack st,hash h)
{
if(now==strlen(s))
{
for(int i=0;i<strlen(s);i++)
rs[start][i]=st.ss[i];
start++;
return;
}
for(int i=0;i<strlen(s);i++)
{
if(used[i])continue;
int flag=0;
for(int j=0;j<st.top;j++)
{
Node m(s[i],st.ss[j]);
if(h.find(m))
{
flag=1;
break;
}
}
if(flag)continue;
used[i]=1;
st.push(s[i]);
dfs(now+1,st,h);
st.pop();
used[i]=0;
}
}
int cmp(char s1[][21],int i,int j)
{
for(int k=0;k<strlen(s);k++)
{
if(s1[i][k]==s1[j][k])continue;
else
return s1[i][k]-s1[j][k];
}
return 0;
}
int main()
{
string t;
int i,j;
while(getline(cin,t))
{
for(i=j=0;i<t.length();i++)
{
if(t[i]>='a'&&t[i]<='z')
s[j++]=t[i];
}
s[j]='\0';
getline(cin,t);
int index=1;
Node m;
hash h;
for(i=0;i<t.length();i++)
{
if(t[i]>='a'&&t[i]<='z')
{
if(index%2==1)
m.a=t[i];
else
{
m.b=t[i];
h.add(m);
}
index++;
}
}
start=0;
for(int i=0;i<strlen(s);i++)
{
memset(used,0,sizeof(used));
stack st;
if(h.find2(s[i]))
continue;
used[i]=1;
st.push(s[i]);
dfs(1,st,h);
}
int visit[300];
memset(visit,0,sizeof(visit));
while(1)
{
int flag=0,i,temp;
for(i=0;i<start;i++)
{
if(!visit[i])
{
temp=i;
flag=1;
break;
}
}
if(flag==0)
break;
for(int i=1;i<start;i++)
{
if(cmp(rs,temp,i)==0)
visit[i]=1;
if(!visit[i]&&cmp(rs,temp,i)>0)
{
temp=i;
}
}
for(int i=0;i<strlen(s);i++)
cout<<rs[temp][i];
cout<<endl;
visit[temp]=1;
}
cout<<endl;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator