- 在线时间
- 0 小时
- 最后登录
- 2005-4-22
- 注册时间
- 2005-4-22
- 听众数
- 2
- 收听数
- 0
- 能力
- 0 分
- 体力
- 72 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 26
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 7
- 主题
- 2
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   22.11% 该用户从未签到
 |
< >很经典的一道问题,我想大家应该都会,我这次只是想帮助那些还不是很懂得人,还是一样附上解题报告和源代码。觉得好的就顶,主要是用模式串来解决。</P>
% O* u6 J, `) L( L3 A< >[[/hide]</P>#include <iostream>
! y- x% P# e9 W @3 K |#include <fstream>
7 g: K J F! A6 Eusing namespace std;. u# ~3 V$ i [2 x# j d
ifstream in("input.txt");$ r+ z6 M. P& Q$ r1 u9 l
ofstream out("output.txt");/ y/ @$ ^. u+ A% Y7 n+ E+ w/ W' u
class String; `% J$ Q+ f- v9 G1 O. i0 h
{
. [1 i1 W8 Z# ^ public:
: C9 s" \& H5 p. y6 U String(char *s="");
' |# C; a' N! \4 H$ X0 E6 S" O2 K w String(const String& s);
7 p$ A) M7 |* V ~String();! _/ ~2 j( P0 I9 a; U
int Length() const;
5 H4 v" i. q2 K: D2 G0 h$ k4 s int ReadString();6 J- z4 p; @) [$ N( z
int Rs(); L7 h* O# @( o$ Q
void Prefix();* e, C! u, \9 S7 |5 t, J) I
void ModifiedPrefix();
~- C% s& Y1 B int Match(int i,String& t);
+ W# u- o( K( V! I9 Y private:
6 M0 }% Q" ?0 h0 x1 ]$ _ m char *str;) ^; {* U3 s' v8 w! i: L
int *pre;
2 `; z' [$ z# L6 g' o1 A int size;
/ e n$ c- E. C5 K};0 n+ g. I! `7 D& l' ~* Y
String::String(char *s)
, _, g) z8 _# f) Y9 u. F{1 p! ^8 P& ~$ T; y2 ?
size=strlen(s)+1;
0 m( W5 B' J/ r3 V% @- Z str=new char[size];# J R4 d& j9 O& m
if(str==0); J; u# ~, x; C6 N0 t9 T) A' [- j
throw "error";
2 M! h0 a; L! h. ?4 y4 n' o7 i strcpy(str,s);/ G* v8 G( J& D0 d
pre=new int[size];* Q5 g- M, @ x; w5 g4 `4 ?7 p
if(pre==0), F, M8 z3 | v! a
throw "error";+ i0 v: i( ^4 Y
}
7 K: K! N4 t# z. ^( O- HString::String(const String& s)
% ]( |' x5 c8 o, K, m6 i{; b4 y I! O+ W6 J8 t" {
size=s.size;
9 H! x& }+ K$ O/ ]$ P% t5 Q str=new char [size];9 S" ~0 j+ _+ S/ [, a8 U+ X
if(str==0)) `3 F& F) C# g `+ `
throw "error";
( U) u( }* t% \0 `1 l strcpy(str,s.str);
) B5 F. w* |7 B pre=new int [size];2 u4 Y2 ]- j3 f+ h- `% G! R
if(pre==0)1 G X6 x+ r! i/ W
throw "error";
8 Y, S. s% h, f) t* X}" q, N4 G; G8 @3 J6 q" A7 d
String::~String()
Y8 h3 `! e8 @. N% s{# A% z1 q u2 j. y% \
delete [] str;$ a, }3 R; E7 }' j$ i, n
delete [] pre;5 S: |% {2 W' g/ h7 h
}
9 f7 R9 H3 \2 T; `; Oint String: ength() const
' ?. t1 b; e! I- q" }{
7 K }3 S" {& \! F; w return size-1;
! w! s7 ~. v2 A5 m6 a) M}
5 @7 E) X* Z; W% lint String::ReadString()$ f( D6 ?! @7 i* X: z3 o" H
{0 f+ p1 v# C/ p7 O+ Z6 c. Q( `
char tmp[256];
% k2 Y1 A1 |: ?! d* h. j& I if(in>>tmp)0 G; d' [2 f- |; o4 }9 }' Y
{, q( l6 ~0 Q% O+ t& i' \% F1 p* S+ R
delete [] str;
; E4 e! n0 M8 w size=strlen(tmp)+1;% H) d% R- [- M0 s( C0 ^
str=new char [size];7 z$ l7 B9 k2 M' K. F* w& }
strcpy(str,tmp);
$ {1 t; H# T/ I& m1 h' O2 ] return size-1;
" |0 K$ s* X% R1 Q: Y! ? }
" p5 Z7 v4 q6 }, ~5 N$ P else
% `6 O0 k* n. f# p% ^( \ return -1;
' Y$ R: ~! |- w' ^5 ?0 k}
2 b8 d; R3 I+ `+ z+ qint String::Rs()8 |. R+ }! _. U! a2 G" S. S3 `. r8 s
{3 B0 @4 H6 [- i3 T, f7 _3 Z
char tmp[256],c;
/ l" _$ F& N/ U7 T/ w3 n, r int i=0;
9 A1 O# h. q/ R8 d; U( [ while(in>>c)
* _0 t! B/ E. A' f7 ?( N5 m$ i {) _0 Q$ `" L' @# R, X- E
if(c!='*')5 Y& X1 R8 X8 S9 \" O+ x
tmp[i++]=c;
" U: P$ ^1 m s1 e9 A; s; `- _ else if(c=='*'&&i>0)
9 N" h1 |! s6 ?8 H0 o7 ] break;
# ~( l* y% F$ U, U: ^ @; m Q }
5 p. u1 ~: E9 J( X9 ^- ?' D. r if(i>0)8 ^# w h9 H# G7 x$ l0 `% `
{
" e6 o4 P& _/ g3 X7 e! G' Y delete [] str;
1 A# Y' ~/ M, m+ J9 `, }3 s! f size=i+1;
5 B) q5 _% p2 [& u3 P' z str=new char[size];8 [# v+ I$ d5 ?+ _6 ], h
if(str==0)' d! h# G3 w! l. ?" Z9 |
throw "error";) k# I P1 T; | f& @
for(i=0;i<size-1;i++)
: l* F8 p0 m. t" H% x str=tmp;
+ C8 f2 o- T( \) B8 x [ return size-1;
" u% ` Z" ^' F( m4 } }; `1 R! j/ m" y W2 k }
else
4 b, d5 H! M' _" `$ B return -1;" S4 f: d; B# K8 S
}
3 Y+ y) X% S6 c9 K) `void String: refix()
' M* d' E% z- B5 D) r; L{
; G( j5 h9 n, x4 m# X/ g3 C' W int m=Length();
5 W# J1 Q2 ~7 |" L, j: Z delete [] pre;
* p1 `: Y2 ~$ v$ w) p+ R2 i pre=new int [m+1];
6 P/ A7 h6 J& D* z1 k. o pre[1]=0;
4 n& @% T! T) g" a" V5 h+ @ int k=0;
& [! I, q' Y- Y1 n& |, o( D for(int i=2;i<=m;i++)
' X I: A- J, |8 E {
6 q( t% I% m) \: p while((*(str+i-1)!=*(str+k))&&(k>0))
$ U! W( c" t$ y3 I. G k=pre[k];
* W( l# P4 a* X6 t- k% { if(*(str+i-1)==*(str+k))
4 I" Y9 w4 I% G pre=++k;9 V/ @; P6 x+ P" f+ Y2 S2 }$ R/ g; M
else
' k% ^- _* u) U6 s pre=0;1 W) R) u$ a+ C+ c" Y* W
}6 Y. N- y }: T% N, d
}% S8 N5 Y+ s$ X# Z2 @* b
void String::ModifiedPrefix()
' H3 B: |5 Y. f{$ N7 h5 c; ^! O7 N# `! Q/ }7 W5 {
int *f;% B e1 S |* ]/ i! S
int m=Length();3 h q! D2 A9 f- z
f=new int[m+1];
" ~8 A5 c- L5 ~0 B: Z Prefix();
: w; Y2 z% Q0 i U" L& y for(int i=1;i<=m;i++)
, L1 J' j& W5 _ {
" O6 H- G3 M; V f=pre;
- u+ P' B! u' W4 w }
% b8 Y+ @6 r; Q0 X% _, X( F for(i=1;i<m;i++)
5 y2 k* d! c0 P. Q0 z8 b, n {
- J: {$ v( f5 \' d+ K" C5 e6 W1 X+ g int k=f;1 l1 x2 X6 `4 o, G* {4 Y( R2 J
if((k==0)||(*(str+i)!=*(str+k)))! {/ I s- l% H! E7 n6 f3 C
pre=k;4 y2 L- J# x% F1 j
else
; C! m% y$ h: b E3 I pre=pre[k];% B6 m5 `* \+ o5 B& ~
}# e% l$ V I+ j* Z/ n, W, C; _0 N
delete []f;& i0 |% R% X+ j4 E" T9 r
}
2 J) x: U# _# U. n- cint String::Match(int i,String& t)
2 \. w7 h; c/ w, }, M) w1 M: Z{
_: {0 h/ a" l) T9 D' S int j=0;
* K9 l6 p! Z' ^6 S( I7 V int n=Length(),m=t.Length();9 s# y' S2 j) z; i0 z
t.ModifiedPrefix();
+ f4 l d& S6 h: W while((i<=n)&&(j<m))
0 j+ }! X9 B+ Z% X8 }( ] if(str[i-1]==t.str[j])6 |& u1 d# t, A6 ?% o: M
{
8 P" E+ B, e8 L i++;
7 T2 ~" S6 L& v/ [( q j++;# y3 r K5 K' K7 f/ U: [* l
}/ L. D1 @8 \: L1 B% K" o
else
: _' [+ K9 m, B. S: f& Q2 l if(j==0)8 ]2 A8 n D: l2 m8 N( G$ `+ g
i++;$ z) N8 ]! @2 k6 p% P
else
" O6 C p% `7 h% p1 l% w/ ^3 l. F j=t.pre[j];+ t$ @/ X, m* \/ y
if(j<m)
$ I* o. c& }. }# u( o return 0;
8 m% G. f; s: Z5 a else 2 W) B! s6 e0 r8 Y7 i1 F
return i-1;
g) C& G: I* ]8 F( o}
" C# U( J _1 K' q+ Oint main()4 f6 l* }& |5 F8 X1 I+ t& E
{
7 O0 A! |4 g' I0 B( w1 s. m" [ if(in.fail())4 r3 z1 {% K$ k1 n. K0 p% ^
{; h* l. t& z3 ~% m
cout<<"the input.txt is not exist!";1 r6 U8 H& r' V- a$ L- t
exit(1);}
/ [+ S- \$ R9 G3 r int i=1;4 {0 h8 Y0 \# \" `
String s,t;
* e) D. g" [' l. b" D2 o' n9 N s.ReadString();
( U0 n4 k% t( R5 F while(t.Rs()+1)! i2 W- k; E. @$ F$ Z1 G( Q8 o; Y
{& _+ Q; {1 ~3 M! ~6 y
i=s.Match(i,t);
! }& s% }# X |7 C( Q if(!i)
8 R7 A5 ^$ K3 u/ H( Z- R {. s6 r+ s4 X3 p
out<<"No"<<endl;
9 ]' A+ s" L1 I. i, \! G3 H break;8 V2 p5 I: }8 {0 z# o: n& f1 R
}
d; ?0 i: ?1 T' N" Z% H6 U }! n5 B1 z( q; H+ Y: h1 p
if(i)+ M% q8 i; E. b6 |2 F
out<<"Yes"<<endl;
; T& V O( H& Q4 g! ]) p return 0;
# {5 f( W' u6 U \, w} |
zan
|