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 |
OLE到跪了!!!!求解释。#include<iostream> #include<string> #include<algorithm> using namespace std; int n,m,t; string str; struct node { string s; int pos; }a[11000],p[11000]; int cmp(const node &t1,const node &t2) { if(t1.s.length ()==t2.s.length ()) return t1.s<t2.s; return t1.s.length ()<t2.s.length (); } int cmp1(const node &t1,const node &t2) { return t1.pos<t2.pos; } int main() { n=0; int i,j,k; //freopen("f:\\testin.txt","r",stdin); while(cin>>str) { if(str=="#") break; a[n].pos=n; a[n++].s=str; } sort(a,a+n,cmp); while(cin>>str) { if(str=="#") break; i=0; j=n; if(a[0].s==str) { cout<<str<<" is correct"<<endl; continue; } m=0; while(i<=j) { k=i+j>>1; if(a[n-1].s==str||a[k].s==str) { cout<<str<<" is correct"<<endl; m=1; break; } else if(a[k].s.length ()<str.length ()||a[k].s.length ()==str.length ()&&a[k].s<str) i=k+1; else j=k-1; } if(m) continue; i=0; j=n; cout<<str<<":"; int beg=0; while(i<=j) { if(str.length ()+1<=a[0].s.length ()) break; k=i+j>>1; if(a[k].s.length ()>=str.length ()-1&&a[k-1].s.length ()<str.length ()-1) { beg=k; break; } else if(a[k].s.length ()<str.length ()-1) i=k+1; else j=k-1; } t=0; for(i=beg;a[i].s.length ()<str.length ()+2;i++) { m=0; k=0; for(j=0;j<str.length ()&&k<a[i].s.length ();j++,k++) { if(a[i].s[k]==str[j]) { m++; } else if(a[i].s.length ()<str.length ()) k--; else if(a[i].s.length ()>str.length ()) j--; } if(str.length ()>=a[i].s.length ()&&m==str.length ()-1||m==str.length ()) p[t++]=a[i]; } sort(p,p+t,cmp1); for(i=0;i<t;i++) cout<<' '<<p[i].s; cout<<endl; } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator