- 在线时间
- 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! }3 ?8 |) r! W" G. [$ T
< >[[/hide]</P>#include <iostream>$ ~; m! |0 {' @0 q1 n
#include <fstream>
- V" O& D( _3 uusing namespace std;+ D% [7 B/ o2 [9 i& m1 K1 ?
ifstream in("input.txt");
3 T$ i5 k' U- z9 F! f/ zofstream out("output.txt");$ b0 V- r1 _( w; X7 p! x( y5 k! K
class String! N0 V4 M) d* \! s& s: O/ t
{
# J6 k4 d& A6 d6 y5 C5 I8 o public:
) ]" c* x6 v! ?5 n" Y; _ String(char *s="");4 K# }) t6 |. Q7 \( r8 \% e6 g
String(const String& s);
s4 z/ _! ~+ Q0 e1 f$ T, Q/ F J ~String();
6 {, |$ T( E7 v& L int Length() const;$ Y0 h) |( s- W1 t. B+ ]
int ReadString();
% Q* K" [; k9 ?! ~ J m8 T* J% m int Rs();
5 L9 k- d% o1 F; f void Prefix();0 `/ y; k& _' f- [* m* f( S0 F
void ModifiedPrefix();
, Q% w5 g. {& x int Match(int i,String& t);
, ~2 |, w" {4 `* s0 B private:
5 }, s B* V' w$ q% l char *str;
2 B7 n9 {$ J) D2 s$ t4 _8 c int *pre;
8 {& z# Q- J7 z int size;
1 C+ C, u$ ]) b5 G% }. B: Y};$ O* y' W0 {# B8 L5 Y
String::String(char *s)
# @" F( U# ~- t, X# H{
/ A! c- e' s3 | size=strlen(s)+1;
' O3 _0 g8 w: v$ N/ n' q, H str=new char[size];
+ H# J4 {# u6 D9 N; W/ X; I, W7 \' f if(str==0)3 \' Z6 P) \& h
throw "error";% _8 g2 u6 w0 \2 z q
strcpy(str,s);
/ [3 L; c, @* e; e$ j pre=new int[size];% U0 Y) T% a' D9 G% n
if(pre==0)
3 }. C/ `; p) c1 Y" J; Y throw "error";! ~: w' D# _2 s; S+ N, N
}7 J. b1 {4 s# O
String::String(const String& s)4 Q( l( T1 {* q! r! B& G: x
{
8 k& n+ P! j% x! L) m' f size=s.size;
( g0 D! y& X+ m, ]4 `$ J str=new char [size];0 ?4 V% z3 \! r! H, Q& q/ Q7 J6 L- w
if(str==0)& o7 Z0 }8 f7 i
throw "error";) J. C j. J# A$ n
strcpy(str,s.str);
' H) i: m8 W' J0 x9 C+ u3 n pre=new int [size];9 D/ a B. G6 W5 `( q. B* M, @
if(pre==0)9 m6 B. [0 D' k: u9 k# t5 j% D
throw "error";
( A& [( h% T6 ?4 G3 Z}
2 U$ y# m6 p& z$ G* W+ g) ^$ M- kString::~String()0 z+ E' x9 q! F0 t0 A
{$ Q. K/ E' x3 T% f. \* i6 R
delete [] str;
5 l; j; M! r" F2 f, l* A2 y2 E delete [] pre;/ i* ^" X6 `' R% ?9 _: S
}
3 T4 \" b: `) A Yint String: ength() const/ x; _1 P. e) Q9 |
{
2 q7 h; o! P% s: B8 f8 T; @0 J return size-1;
* @# \0 y* v# L, \# W2 n}8 Q3 `) T- @0 D. F: y
int String::ReadString()& v9 n" v- k- P2 `" u; y& D
{# d8 O Y" ]* `+ G( B( Y
char tmp[256];3 K( A3 a( E# r; P
if(in>>tmp)
% a0 ~3 ]9 B$ { {0 c$ \+ [ O6 \. f
delete [] str; D& Z P! n; U. g" B
size=strlen(tmp)+1;1 L( \, k( z2 g' ?, A) x
str=new char [size];
$ f9 i' j$ y0 \9 | strcpy(str,tmp);
# N/ u# f( C6 \/ I6 D; f return size-1;
7 t3 t# H S1 t9 z+ P# b }
J0 I0 Y6 E# ?6 t% y3 g' ? else) Q! r) M" W5 ~* _
return -1;
$ `; y6 l+ j3 O& [$ X, L' q}
! o! a: z# f6 \- g+ i Q5 Zint String::Rs()
9 c) Z: h: J9 Y3 S' ?0 n( f6 O/ {{3 p1 d) k. y5 h) F- ?
char tmp[256],c;
0 j' X ], k5 C1 J$ i, j# s int i=0;
# h$ o# l! E4 v while(in>>c)2 r% ^* @4 v/ Y) Y* @; \2 c& {
{4 Z" @2 o& W6 E( K0 F9 D
if(c!='*')- P( t3 H+ m" z. b1 h- f: W* J
tmp[i++]=c;6 H0 i! O1 e( W7 n: e; H' H, P
else if(c=='*'&&i>0)8 H! R/ W% ?) ^8 x9 l3 w' q
break;
, Q# {+ M& [5 Z: G }% \% G" @" E$ C P( s
if(i>0)1 t* E% Q! i8 o6 G3 c9 x6 _2 y! g0 C
{+ A9 a/ z6 F& T$ c% H8 X
delete [] str;5 M3 o6 o3 a5 Z! X
size=i+1;1 b7 ]3 \/ X" t
str=new char[size];9 {3 G, \( K8 o' V4 Z3 j0 n8 g
if(str==0)- Z! \0 e& g2 I2 \2 }
throw "error"; j& V9 _2 |5 s+ G3 V
for(i=0;i<size-1;i++)
+ y! A4 ?7 O( ~) n4 k str=tmp;
$ Q( Y, Y" p/ f1 [: y" I9 z* d return size-1;
/ Y) T) U h3 ?/ y! r }. F9 |8 J' G/ R/ f1 k% {. X
else
4 w: C$ R* B2 X$ f1 D2 | return -1;; B5 Z% B2 k" ]; i2 f/ z# ^
}& i- b1 k$ r7 P7 j! u
void String: refix()' o0 W$ i* @7 S2 u1 `
{+ [& V' _+ ~' d
int m=Length();
5 W3 q7 K8 v1 n delete [] pre;
4 F. k9 }0 ~8 Z: v- z pre=new int [m+1];8 x- L9 _7 l( f4 o' u/ ^3 v, A( \
pre[1]=0;4 S4 ` O) V# f8 |4 {3 @* w
int k=0;
4 X1 }% n2 O! R# d6 p4 B for(int i=2;i<=m;i++), d) J- N: z8 [' w3 k% ^. h
{
; D. m; E1 M9 }. l6 c; A+ H while((*(str+i-1)!=*(str+k))&&(k>0))
3 y+ B. A" s0 A7 G3 b$ g k=pre[k];
, i2 z% ^9 K( ]/ |! _6 Z6 q if(*(str+i-1)==*(str+k))
+ H+ t4 H) W: S$ H+ n pre=++k;2 J z5 M$ u, ^/ ?5 ~# E
else
$ K! F2 r0 [% B9 v pre=0;
& ]; d& w. ^- U* F; l, x }
8 E6 n3 t; C: w}2 d# _, g4 `" g$ {6 L! U% M% I. g. i
void String::ModifiedPrefix()
) H) Q3 {# k. A2 K- B. w{
# ~) n. C4 p- B# i int *f;
/ Q/ a y( w8 {* L A: P int m=Length();8 W1 K, H3 B7 `) }+ _6 k% A: f
f=new int[m+1];
6 {; D# ]' z9 o, ?9 V+ `+ \# W Prefix();' K& U- c" t$ d; i
for(int i=1;i<=m;i++)
7 a) O, Z" w3 p% k/ `& c {
: |# l: g$ Q! e, K0 @ f=pre;- I0 L; ~" c7 g9 V
} A* x; ]% D6 v( ?, H' c; s2 z
for(i=1;i<m;i++)4 r1 y( C5 w2 |8 ~ l6 Q4 d
{6 c' h" `) o8 ^- s, V
int k=f;9 i: H0 M, A* G' P& y. C
if((k==0)||(*(str+i)!=*(str+k)))
4 u; e6 H: j, O" J; K pre=k;
1 y% l; ]: {2 e" E3 ~ else
$ I9 S( M: m C) L. Q1 k# n5 M pre=pre[k];
{% C0 @/ V* v k i9 p1 K3 R# | }! o2 _" S- l1 e1 ~) K
delete []f;
( f& g' {. i0 D( q% n" t! p}! `# f( i8 t' c$ C( U
int String::Match(int i,String& t)
4 R. F+ K' m" m7 |$ f7 L. N. m* z{2 B) d) ?* i4 ~' P6 C) K1 S
int j=0;$ L, D. \1 L6 x$ ~. m
int n=Length(),m=t.Length();! z6 {7 b6 N8 j" g/ P: h# O9 Q! i) Y
t.ModifiedPrefix();; Q0 f9 I. k+ G
while((i<=n)&&(j<m)) M+ \* c# o0 q
if(str[i-1]==t.str[j])
* f f% V& }1 Q8 c' l {
4 ]' M* g& n0 n- y o i++;
X& d) l/ [1 k& A6 g j++;
; O3 @/ @/ Q) g, b }
. {) o! b* y; u: o else $ D) P# T$ u J$ o/ s5 V
if(j==0). a" f9 P# V v) v# v
i++;
( @- v6 S6 G$ N* C else
2 V( J: N, d$ X1 l( V1 o j=t.pre[j];5 e0 Y( W. s' O. |/ r: Q
if(j<m)
6 t6 ]# t* }, `6 d return 0;- g+ t4 S3 |9 P" o- b1 q. X" E$ m) u4 y
else
5 t R; b2 X& |2 f F- F# G return i-1;7 C% E8 z6 o' V9 |, E
}
5 u5 M# `# i7 l' u$ h( z# dint main()! @9 X1 d) b& t. J0 G1 N0 K
{& V- X" k! B5 O1 k
if(in.fail())
* k) |: R/ ]: p2 [6 Q {
# G; {+ w& q7 Y; O cout<<"the input.txt is not exist!";
+ \: U6 I$ P2 x% j* h" F9 G9 S6 M exit(1);}8 F. }4 G( l4 ~# @0 H9 C
int i=1;# _# O- V% S8 L& J( m
String s,t;' Q/ ^) G$ c* @; i5 l
s.ReadString();
0 I# N+ T1 ^4 K while(t.Rs()+1). t, M9 F+ p' |) z, d1 h/ @" i
{
7 c. U7 W$ Q+ T7 i- F i=s.Match(i,t);
8 D O) p! G3 A: W2 h6 l$ m- h if(!i) t6 X# F$ H& m9 X$ \( \. Q
{
2 l- {4 e& N& }4 B$ o6 J9 f out<<"No"<<endl;# Z( @3 }+ x. i* Y+ k5 k
break;4 ~6 t' R5 f& K3 Y3 \: w
}
. [/ D; ]% x. y9 H; T# m7 e }
. L0 F- m1 ^+ U. Y& S7 B5 K/ b- K; m if(i): ^4 S' \1 X# J6 o! E' Q9 E3 G* I
out<<"Yes"<<endl;
9 f: X9 r+ s3 a! F- e return 0;
! f, Q' g% z$ n% h" V} |
zan
|