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 |
Re:这些测试数据都过了,但还是WA!郁闷啊,麻烦大家能提供些测试数据,谢谢!In Reply To:这些测试数据都过了,但还是WA!郁闷啊,麻烦大家能提供些测试数据,谢谢! Posted by:GaryLiang at 2009-08-16 12:38:19 > 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