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 |
记住:大牛是不会理两种人的:1.读题不认真的人2.连KMP都没掌握好的人In Reply To:如何能够在这种题上WA了N次后找到一个乐于助人的大牛? Posted by:AllwaysDead at 2009-02-21 16:45:57 ...... class KMPComparer{ private: int id,pi[10]; char chs[10]; public: KMPComparer(char *a){ chs[0]=a[0]; for (int i=1;a[i-1];i++)chs[i]=a[i]; id=-1; pi[0]=-1; for (int i=1;chs[i];i++){ pi[i]=pi[i-1]; while (pi[i]!=-1 && chs[pi[i]+1]!=chs[i])pi[i]=pi[pi[i]]; if (chs[pi[i]+1]==chs[i])pi[i]++; } } void putch(char a){ while (id!=-1 && chs[id+1]!=a)id=pi[id];//////////////////////////////////////////要想用O(1)的时间来解决这种事,KMP是不二的选择 if (chs[id+1]==a)id++; } int compared(){return chs[id+1]==0;} }; ...... int main() { char a; KMPComparer cDD("dd"),cEOF("EOF"),cPink("pink"),cEI("ei"),cCEI("cei"); Outputpool outP; while ((a=getchar())!=EOF){ cDD.putch(a);cEOF.putch(a);cPink.putch(a);cEI.putch(a);cCEI.putch(a); if (cEOF.compared())break; if (cDD.compared()){ outP.rollback(1); outP.putch('p'); }else if (cEI.compared() && cCEI.compared()==0){/////////////////////////////////////////////////////////////读题! outP.rollback(1); outP.putch("ie"); }else if (cPink.compared()){ outP.rollback(3); outP.putch("floyd"); }else if (a>='a' && a<='z' || a==' ' || a=='\n' || a=='\t')outP.putch(a); } outP.empty(); getchar();getchar(); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator