- 在线时间
- 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>
3 c J; U9 {2 ~" j< >[[/hide]</P>#include <iostream>" F) T; I) q7 {. ~
#include <fstream>4 a: ]- V3 V9 N! C
using namespace std;. D, Y( l; r |. P
ifstream in("input.txt");
?* _0 n1 `- o. u. B3 nofstream out("output.txt");
, e f: D6 [, _$ A& ^class String
! H/ T- x! R! J: d9 W, ~5 E3 M6 X& u{
. a' A. d* B8 a; _ public:* p, r, R5 t4 L$ ^7 L
String(char *s="");
4 z, H I. F3 l N( a/ d& d9 Q String(const String& s);
, w8 h& I3 k7 @: i2 Z: A ~String();5 L* t% e. A! i* m! k
int Length() const;
& `: I: f# R$ u int ReadString();
3 B& Q1 a2 X5 r8 @6 w; a int Rs();+ s' u! b" U# `
void Prefix();- Q3 F' X# s$ W
void ModifiedPrefix();1 f5 u# D2 B- M0 I
int Match(int i,String& t);/ E/ j% ]0 |/ c% z! @4 ]
private:' e0 Y+ ]! O! g& P, ]6 I: R* ~
char *str;
6 z4 c7 g% y9 F int *pre;' a8 o5 Q6 l/ Y% h X
int size;
( D# ]( g, |0 Q2 ^; R};9 t, J' K6 T Q/ ]! I. u
String::String(char *s)
# h0 z9 \" b4 d' p; h+ G{) Y7 t# n: G4 a3 E4 g: V4 W+ B$ C4 u
size=strlen(s)+1;- E2 E8 u8 x5 N' n/ U3 O
str=new char[size];
. C: h* ?7 h; n# ^; {1 e if(str==0)+ @2 l- c) T3 d5 [! u
throw "error";5 ~' I* r: T$ N+ P7 }+ z& Z3 p
strcpy(str,s);8 I+ ~3 m! F0 K6 j0 [# d! f" F' z
pre=new int[size];
3 P5 N9 r# S& d; K, }6 M M: F& ~ if(pre==0)
2 [& M. v# U8 G$ h" ?, D throw "error";
+ U+ x/ t6 ]; i7 f* C4 d& z% \}7 l# J& n, H6 t
String::String(const String& s)
: `5 u) @- @! r{) B; V: S/ z1 r, X
size=s.size;
# m: H' W6 R$ }2 x str=new char [size];
& B; @8 k8 D) Q f+ G) I# y if(str==0)
9 \2 ], R8 T2 _6 U' y throw "error";2 ], `5 ?& U; l# o% F6 C& P% ~
strcpy(str,s.str);
! m1 ~1 T; ~& J: n pre=new int [size];
6 O. }/ @% P2 Y if(pre==0)* ]4 P+ L# s& e! }3 g4 \: X
throw "error";% P. j7 |9 ~0 t; H; O* W
}
6 o( Z- y* L0 _7 N# a& x2 KString::~String()
0 \$ _' g6 k5 ~$ z7 \7 E, w{$ S1 H/ ~, A9 t6 h2 [0 U+ p+ r
delete [] str;& t! M( Q: y3 W% E* v7 M; I8 I
delete [] pre;9 {6 {. r: m) }1 b- P& B! _
}
7 ~' R! m6 ~" E, p. k+ ~0 tint String: ength() const4 @" z3 i5 ~3 K
{
$ s/ k# f* `# l& _4 U% B return size-1;
, V9 J$ X2 x) j/ Y" m. E}
! ~9 A/ Q1 b" N& dint String::ReadString()
! Q' i! j: A% }5 `{+ }$ }5 B" M3 G* i9 D) I: E6 e
char tmp[256];
8 f# w1 N+ L$ H2 r6 {- j" [ if(in>>tmp)4 G. g! M+ e8 @) T; n! @
{8 X. |3 F6 I7 g9 ^
delete [] str;
0 S$ n; V, R$ X/ G: N1 M8 U6 \ size=strlen(tmp)+1;7 b- j2 Z8 P) R, F( J+ A
str=new char [size];
# ?8 t. x* `- o6 ]3 k0 G- u% o strcpy(str,tmp);
' z! R9 A1 k4 @8 ?+ i return size-1;( @5 G2 _1 M5 U; K. z
}
H+ e2 L" N- }" m& D' M else! m3 ?& F. }0 b m; x
return -1;
; k/ o( P6 b, o5 }% X9 C}7 `# c! v: s1 I6 ]3 p' n
int String::Rs()
1 B8 ? h) z4 ]+ M. X# F, y9 k{% i* i# G2 V! i! f7 `
char tmp[256],c;
_/ v3 k; j. N6 r int i=0;
0 e G0 `3 w7 x3 W+ L while(in>>c)( ^* _% b% }9 `* b3 P( U
{1 K. F7 ^: z+ a+ {- U6 {2 j
if(c!='*')+ [8 u7 x6 N) @) J# r7 K- O1 u2 H
tmp[i++]=c;
1 O8 s2 b4 I7 T7 e w/ u else if(c=='*'&&i>0)' d4 X1 z5 s+ I
break;6 R& G3 X0 o1 M1 B, A" Z4 i: N! L
}$ W0 g8 ~' M7 t! D
if(i>0)
9 O" m& O9 @/ S$ U; x {) f" D* K6 F3 [% T. k. l8 r
delete [] str;" b% V( j# T# J
size=i+1;* d5 O5 o& [( F/ O7 L; ?' i( A( N
str=new char[size];+ U2 f+ H4 Q( C _( Q" @
if(str==0)
. x, s- G' w: u! F2 w- S throw "error";- d6 n# b" d5 H, a
for(i=0;i<size-1;i++)9 T' _( l1 I& v' b' ~& j D
str=tmp;
4 f9 u% E) {1 W: d3 E return size-1;
) Z* l8 u* O5 f. `& f% X5 @ }+ \/ ^% n* C" I7 [9 D
else# D! ^3 h; y( w9 t6 ~
return -1;
7 ]& N" o8 v4 c2 c3 d& i# X}
8 g7 L$ \3 u2 ~! Y4 ^# a: E! Fvoid String: refix()
1 N$ \0 c; _" M4 K: T, p% O! D{/ g0 x; |6 ]5 D/ D: @
int m=Length();5 S1 u/ F, ~7 ?: j" z5 U$ f
delete [] pre;
' }+ w3 Y3 L1 j `" a pre=new int [m+1];. {1 q+ b6 t. ~7 p6 Z- v% L
pre[1]=0; [) t3 I. b3 D4 t
int k=0;8 y% c4 h3 A* R8 `' ^2 n* ?
for(int i=2;i<=m;i++)
* j) W u7 r* N {: N/ y. H) k4 S2 E! i( T% T
while((*(str+i-1)!=*(str+k))&&(k>0))/ E$ r* e4 a( @+ x1 {# x
k=pre[k];
/ R- D% j# i5 O n. _7 K# g if(*(str+i-1)==*(str+k))3 L& D3 ]+ B% L
pre=++k;5 {3 @8 q [% D9 p. j
else% ]( E0 ?2 P2 Y- X
pre=0;" F7 y: M4 Z- K n) i
}) w2 Q* _: y! C% ?3 ^+ Q! x0 z
}5 d' B ~9 j) m( i. c
void String::ModifiedPrefix()
& ~' }0 Z" F4 D' d& S* d{
' {5 u* Q( Z% a* o int *f;
o" a2 V0 n9 i: j' k int m=Length();
( G, c3 A! s4 b f=new int[m+1];9 b4 ~0 @, f! z( l
Prefix();2 p7 }) s* I8 G& w2 m- G. S
for(int i=1;i<=m;i++)
! F% x: A+ p% G( j N: A4 [ {
* @! e, w/ E9 X$ W+ g) Y$ j# o9 M f=pre;
6 H) H) U1 t' |( X" C }1 w7 |$ ]: M' Y$ L" a% W4 p
for(i=1;i<m;i++)
( t( p1 ]. |/ M {9 u4 B+ \( b1 Q) d- H9 C3 R: z
int k=f;& {0 m; ]) ?: E# c. s
if((k==0)||(*(str+i)!=*(str+k)))
# X+ M) W- y! K; O pre=k;$ C$ D# W: d8 A! r6 }
else
! R. s% s9 m# k" z pre=pre[k];
2 Y- D. \' a" n5 r }
$ E! x1 q/ i s- b delete []f;
% Y4 k$ U6 G3 F6 v7 e+ o}
2 x& b: z( p6 a6 cint String::Match(int i,String& t)
) o( ?$ W, {% e4 k; R4 H: Y{
- N: y5 V+ x* X+ [# u6 V! x0 K int j=0;
{. F0 Y6 [8 x3 h3 a; u1 q int n=Length(),m=t.Length();& U9 J) U$ E. S6 y5 |7 j
t.ModifiedPrefix();
$ @( l/ l" `# \6 L. S while((i<=n)&&(j<m)), M# ~( }% v8 v1 A/ {) a d; Z! u
if(str[i-1]==t.str[j])3 y2 W: I: _+ i+ B2 K' v3 {
{5 z) _1 ? I* d8 @9 J$ ~$ E
i++;
/ e" r" Z" M# s" f( e( H j++;
" @" M+ S' F& M9 {% B) s, t }
$ u, g: n9 t/ p# T, ^* v% H else
1 o" G" d# W4 ^$ l if(j==0)6 n0 P! L& ~- ] [2 B( G' @* x6 Y
i++;9 C8 s! q- `; G' m8 }' I
else ! ^6 H% {7 a9 h+ g
j=t.pre[j];
/ @# R3 L, t* e' N( }: Z* t if(j<m)
. t& {- l- c; O1 h return 0;$ D2 N' n* j- _$ Z+ v4 t
else
7 y) g+ G* r1 A% s- e( d: Z5 ^" D return i-1;" R3 D, j8 S# Y7 e# y+ ^
}1 R3 V1 T9 R8 ^% `1 j: [% j5 v
int main()8 G/ L5 b1 H; [8 r/ o1 R- Z
{! f- g( p$ ^6 V2 a; a) A0 b; z; B7 K& n
if(in.fail())8 K& I3 l, D3 C/ t7 N
{
: o( e4 j# ~# | d8 a$ w7 u# w cout<<"the input.txt is not exist!";
& a+ K. k& w- \ exit(1);}: Y9 D+ p6 L- C* c3 G9 w
int i=1;: C, e: H: j$ \# Z
String s,t;9 C1 F: B4 g6 t( I( L7 v3 }
s.ReadString();8 i* b$ v0 D4 ^3 R9 i% I
while(t.Rs()+1)
0 A3 q- P* A- S7 k) A {: A+ G/ ]- A0 x2 h1 `/ _
i=s.Match(i,t);
+ W) N ]$ \. h* ~1 ? if(!i)) C: j! k; N3 b( ]+ q0 `( \: m
{
8 l. z; P' G. k( p O out<<"No"<<endl;
- c- R! N5 c' {2 N: w, o break;7 d, k) D# ^# a0 [3 g
}7 {5 s( ^" q) T' s% b
}
" k' o6 T. B2 N, I: A- L2 d if(i)
5 G; ]$ Q* f' y2 g" q2 S8 J9 h9 D' [" Q out<<"Yes"<<endl;$ { [7 _8 I: l; C8 c. A; b
return 0;
. j5 P) H6 z3 d/ v0 y& A} |
zan
|