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 |
这些测试数据都过了,但还是WA!郁闷啊,麻烦大家能提供些测试数据,谢谢!3 2 b?g* b?g* ?ft?? bags wftke 5 2 t*h*wm ?h*s*w *h*w *m*w *j*j jj jjj 5 4 t* ?h*s ??e* *s ?*e this the an is 代码如下: // 1816_WildWord2.cpp : 定义控制台应用程序的入口点。 // #include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; int dict[20000][28]; vector<int> ids[20000]; int isleaf[20000]; int pos=0; void Insert(string str,int order){ int len=str.length(); const char * strchar=str.c_str(); int tpos=0; for(int i=0;i<len;i++){ char letter=strchar[i]; if(i==len-1){ if(letter=='*'){ if(dict[tpos][27]==0){ dict[tpos][27]=++pos; isleaf[tpos]=0; } ids[dict[tpos][27]].push_back(order); tpos=dict[tpos][27]; } else if(letter=='?'){ if(dict[tpos][26]==0){ dict[tpos][26]=++pos; isleaf[tpos]=0; } ids[dict[tpos][26]].push_back(order); tpos=dict[tpos][26]; } else { if(dict[tpos][letter-'a']==0){ dict[tpos][letter-'a']=++pos; isleaf[tpos]=0; } ids[dict[tpos][letter-'a']].push_back(order); tpos=dict[tpos][letter-'a']; } } else{ if(letter=='*'){ if(dict[tpos][27]==0){ dict[tpos][27]=++pos; isleaf[tpos]=0; } tpos=dict[tpos][27]; } else if(letter=='?'){ if(dict[tpos][26]==0){ dict[tpos][26]=++pos; isleaf[tpos]=0; } tpos=dict[tpos][26]; } else { if(dict[tpos][letter-'a']==0){ dict[tpos][letter-'a']=++pos; isleaf[tpos]=0; } tpos=dict[tpos][letter-'a']; } } } } void DFS(int ps,string strw,vector<int> & tpv,int order){ int len=strw.length(); const char * strwchar=strw.c_str(); char letter=strwchar[order]; if(dict[ps][letter-'a']!=0){ if((ids[dict[ps][letter-'a']].size()!=0)&&(order==len-1)){ int sizej=ids[dict[ps][letter-'a']].size(); for(int j=0;j<sizej;j++){ tpv.push_back((ids[dict[ps][letter-'a']])[j]); } } else if(order==len-1){ int etp=dict[dict[ps][letter-'a']][27]; while(etp!=0){ int sizej=ids[etp].size(); for(int j=0;j<sizej;j++){ tpv.push_back((ids[etp])[j]); } etp=dict[etp][27]; } return; } else if(isleaf[ps]==1){ return; } else{ DFS(dict[ps][letter-'a'],strw,tpv,order+1); } } if(dict[ps][26]!=0){ if((ids[dict[ps][26]].size()!=0)&&(order==len-1)){ int sizej=ids[dict[ps][26]].size(); for(int j=0;j<sizej;j++){ tpv.push_back((ids[dict[ps][26]])[j]); } } else if(order==len-1){ int etp=dict[dict[ps][26]][27]; while(etp!=0){ int sizej=ids[etp].size(); for(int j=0;j<sizej;j++){ tpv.push_back((ids[etp])[j]); } etp=dict[etp][27]; } return; } else if(isleaf[ps]==1){ return; } else{ DFS(dict[ps][26],strw,tpv,order+1); } } if(dict[ps][27]!=0){ if((ids[dict[ps][27]].size()!=0)&&(order==len-1)){ int sizej=ids[dict[ps][27]].size(); for(int j=0;j<sizej;j++){ tpv.push_back((ids[dict[ps][27]])[j]); } } else if(order==len-1){ int etp=dict[dict[ps][27]][27]; while(etp!=0){ int sizej=ids[etp].size(); for(int j=0;j<sizej;j++){ tpv.push_back((ids[etp])[j]); } etp=dict[etp][27]; } DFS(dict[ps][27],strw,tpv,order); } else{ DFS(dict[ps][27],strw,tpv,order); for(int j=order;j<len-1;j++){ if(j==len-2){ if(ids[dict[ps][27]].size()!=0){ int sizeh=ids[dict[ps][27]].size(); for(int h=0;h<sizeh;h++){ tpv.push_back((ids[dict[ps][27]])[h]); } } } DFS(dict[ps][27],strw,tpv,j+1); } } } } int main(){ for(int i=0;i<10005;i++){ isleaf[i]=1; for(int j=0;j<10005;j++){ dict[i][j]=0; } } int n,m; cin>>n>>m; string strp,strw; vector<vector<int> > result; for(int i=0;i<n;i++){ cin>>strp; Insert(strp,i); } for(int i=0;i<m;i++){ vector<int> tpv; cin>>strw; DFS(0,strw,tpv,0); sort(tpv.begin(),tpv.end()); tpv.erase(unique(tpv.begin(), tpv.end()), tpv.end()); result.push_back(tpv); } for(int i=0;i<m;i++){ vector<int> tempv=result[i]; int size=tempv.size(); if(size==0){ cout<<"Not match"<<endl; } else { for(int j=0;j<size;j++){ cout<<tempv[j]<<" "; } cout<<endl; } } } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator