PC/UVA 110204/843
本题。DFS。但是由于过多的使用set。导致TLE。。话说。我第一次在挑战编程的那个网站上看到有这个状态。。
//author: CHC
//First Edit Time: 2014-01-22 11:17
//Last Edit Time: 2014-01-22 12:14
//Filename:3.cpp
#include <iostream>
#include <cstdio>
#include <string.h>
#include <queue>
#include <set>
#include <sstream>
#include <algorithm>
using namespace std;
int n,ok;
int s_len[20];
char s_word[20][1010][20];
char m_word[1010][20];
int m_len[1010];
char ha[20][1010],v[256];
char vis[256];
char t[1010];
int dfs(int cur,int end)
{
if(ok)return 1;
if(cur==end) return ok=1;
int len=m_len[cur];
for(int i=0;i<s_len[len];i++){
if(!ha[len][i]){
int ok=1,ha2[256]={ 0 },ha3[256]={ 0 };
int lnum=0;
for(int j=0;j<len&&ok;j++){
int c=s_word[len][i][j],d=m_word[cur][j];
if(!vis[d]&&!v[c]){
vis[d]=c;
v[c]=1;
ha2[lnum]=c;
ha3[lnum]=d;
lnum++;
}
else if(vis[d]!=c)ok=0;
}
if(ok){
ha[i][len]=1;
if(dfs(cur+1,end))return 1;
ha[i][len]=0;
}
for(int j=0;j<lnum;j++)
vis[ha3[j]]&