- 在线时间
- 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>
$ c# r' s. N$ n( H0 r' m< >[[/hide]</P>#include <iostream>& `$ G$ H! K7 Z( c& U) _
#include <fstream>
. C/ g7 ~' E4 A$ I+ busing namespace std;# v! {4 K: J4 T$ ]
ifstream in("input.txt");% e* |' g1 Z5 r9 ]2 V
ofstream out("output.txt");% E) q, O! W4 J2 i# _7 X0 i
class String" d H$ M1 k; K9 O& m# E
{( E2 W1 T' B- y7 S7 v8 F: ?7 |
public:
: } [3 r3 m4 H5 S String(char *s="");
5 C; x/ k P2 |1 n W8 r, H0 e String(const String& s);% S% R4 c' O) L) d' k: J8 |% ?" u6 o
~String();7 s1 X( z2 z+ f; U% A' l
int Length() const;
* x. c- C h) R% `- Q int ReadString(); p" M6 f1 y& q9 J
int Rs();9 Y* N, G: ?7 F% U: g [/ e9 N" ?
void Prefix();7 y& _" D7 j# N* ?) P
void ModifiedPrefix();
( C( y8 g0 ?* Y7 I! q8 p6 K# y int Match(int i,String& t);, c% O) Q" |( y( s
private:
. V: l, U! \, y' Y C" j char *str;
! j& a( _- l+ q int *pre;. |- _" o3 H, L* `6 ]
int size;" i, `% ]# K, J$ o) B3 }( D8 A+ e# Y1 r
};" i! @, m6 @) ]: T% M
String::String(char *s)* Y$ E$ J) J) R. y* ]) Z
{1 t' P" g0 G' K3 K- n7 i9 c9 F# c; w
size=strlen(s)+1;" [/ M* c O1 b
str=new char[size];; M0 H5 c# b* b: ~
if(str==0)+ e1 p$ M( ], ]
throw "error";
, s C# J3 d& T( G3 T/ h" [ strcpy(str,s);& l$ G1 f( Q* T: j
pre=new int[size];0 F: [9 P" Z) v+ e
if(pre==0)4 e5 n1 b! b9 h% k* q
throw "error";2 A& H( U) _' H4 V+ F
}
9 w, {( D2 o" R5 @String::String(const String& s)
5 V# z+ v' l% ~3 G' k5 @{1 l; N, N+ ^3 L+ F
size=s.size;- [8 t g# _- P8 A& _- R) ~
str=new char [size];
: C, k `7 [: f# K8 H9 }" ?6 v" |& W if(str==0); F6 ^- i3 U- n1 L1 A$ g( q
throw "error";% p) V8 u( T% N' o6 p0 C
strcpy(str,s.str);
5 F4 ]& Y& }. ^8 f6 }7 p pre=new int [size];
% e' Y9 V r9 I5 c if(pre==0)
; A1 s8 Q9 T) L( @# P throw "error";
$ c, ?' f( t0 v5 A5 ~7 v. W. {: S}
) V& Z# |7 h1 h* g- n: SString::~String()9 F. q' P2 B& ^8 t" K* O
{* M2 o2 M8 `8 w& ]0 T
delete [] str;* U6 h1 k5 t5 k! w6 \ S# _! Q
delete [] pre;
( n+ b( ?3 f8 k$ f}
0 Q1 U; {0 z! H9 r0 W' iint String: ength() const" t' N7 ^/ ^9 l6 `
{
) t' s- C8 Q' E- `% f/ h return size-1;
- K K+ \3 w) P8 |. Y}( ]7 P0 m$ J, V# W- u9 ~
int String::ReadString()- r- n) R. a: [ S
{% K3 w# v6 p8 E/ r+ L9 K+ E
char tmp[256];
7 {1 n k; t, }4 v3 J8 P if(in>>tmp)
% ?" O9 s u5 n; W7 L {
% C! J* v7 \8 E! s3 m delete [] str;5 r7 F8 Z! J# w% M& v: Z2 J
size=strlen(tmp)+1;
1 J# T) R) S( l& R4 n str=new char [size];
& g2 ]" O$ N, _" o' i strcpy(str,tmp);. `8 s( V6 Q! ^0 V5 ^! r/ X
return size-1;
/ ^3 m* d- ^- R) a* g }+ p2 D6 j9 C! y. }- C
else" O, _2 m4 ~0 b( _
return -1; E2 g3 f' F& S1 V: v* G9 {. n7 x
}# d9 J+ v2 x. y) C3 ~+ Z8 y; e4 m
int String::Rs()# q7 ~: [+ `9 V( j
{
7 P- U+ r- h( U4 s# c( _3 U char tmp[256],c;
7 L; ^3 j2 B$ }# P [9 R7 [ int i=0;1 I) G1 h' N7 \
while(in>>c)
+ A% O/ g4 z( }: v8 _+ `( ?4 o {
8 A7 i% [: u+ [+ K" w if(c!='*')/ r1 z! g! C& y; O$ Z4 q7 f; V' ]
tmp[i++]=c;$ U: i1 ]/ C/ `( B7 j
else if(c=='*'&&i>0)0 y3 U: ~/ L. k0 E2 n. u# G
break;- l; @8 f9 w$ C1 ?9 R: C* O/ U# h* P/ ?
}
5 P; l7 y8 f3 C- w7 U if(i>0)) t [2 C+ q& U
{
4 r7 ]* H W* H: T delete [] str;; u% Q) p( I2 G6 A' ]3 r
size=i+1;; [7 n. _- w* K2 {: T4 T
str=new char[size];
$ @4 ]) f4 L2 Q2 _" \ u if(str==0)+ Y/ r) ~! u* S, Z B' v. H
throw "error";
5 g4 _/ }3 Y+ a for(i=0;i<size-1;i++)
9 F* J0 X9 `) V str=tmp;
, W& l5 V' T: w4 G return size-1;7 i4 W/ c: U. Z6 Y9 h
}
7 s( }* {6 |5 {, o9 L6 A7 N& ] else# q1 C+ {4 u* f: U
return -1;
0 G+ E; L/ I9 r' r' k' X}
" O6 A+ Z& c$ M8 cvoid String: refix()3 F- k# ~8 B `8 o. O6 v) W
{5 @! n" J; S2 R2 \. l9 g. S
int m=Length();8 y- Y8 A8 B, ~, h& n/ k: M
delete [] pre;, |1 b& H$ H9 u6 Q
pre=new int [m+1];: v( q2 L# \) w" m) R3 t
pre[1]=0;
# m+ X' d4 F; Y7 M8 t int k=0;* y$ p$ _* L3 r9 w* U" P0 M8 g
for(int i=2;i<=m;i++)
- i1 U; U; T! W {$ a& B/ M7 ^1 P4 e6 n2 F
while((*(str+i-1)!=*(str+k))&&(k>0))) q4 m4 z- [* D
k=pre[k];5 s4 \, d# c. m1 d
if(*(str+i-1)==*(str+k))
9 Z: H6 s- X7 h pre=++k;- C( g* }* U5 c" F, A
else! G0 e% |. s( K& @& k8 \
pre=0;5 E' G1 {) f$ `# v3 d' `
}4 _ }3 L1 ]! k6 |1 B8 p1 g
}( X9 S2 D$ ^! C5 M, f/ u1 [5 p0 C
void String::ModifiedPrefix()
3 ~8 s3 }4 _5 U" B$ _{
8 [8 C% B0 f: W) z# ~4 x int *f;
/ [! _4 Y9 z- D int m=Length();
+ D3 p3 U3 H3 f f=new int[m+1];% Q2 p6 a9 g$ v. O- @3 W
Prefix();0 C- w) ?- E7 Z n0 P; V$ s0 c$ [
for(int i=1;i<=m;i++)/ P) X/ M# [0 |& o
{
7 w ^6 d1 S0 Q# B$ w1 T/ L' m f=pre;1 ?% h3 J8 D5 k/ V0 T
}
4 i9 ]; b {9 S) L+ [; H4 @ for(i=1;i<m;i++), {* C/ g; I- S% m4 v& r" _
{! y* d' y6 X7 V
int k=f;
" R. h2 t4 L r& c2 \" j; e9 ^7 R$ ] if((k==0)||(*(str+i)!=*(str+k)))
+ K9 w$ q3 t3 d. |3 t pre=k;
6 o3 X4 x# ]$ @8 Q2 o else 7 I1 J4 i) @% s9 }
pre=pre[k];/ z4 Y- l; c7 G9 B. ^2 B/ h* v
}
r: z# j* z# C8 W: v delete []f;
5 F' B$ p, W$ b. E) T1 R8 y" c" Q}, f/ v! b ]2 \! t6 l: A
int String::Match(int i,String& t)5 l' e% {6 K9 n9 }4 @. }3 J
{- x8 l) `0 w3 I/ G! ]
int j=0;3 z5 S3 U; t/ Q" N$ Q
int n=Length(),m=t.Length();
$ Q1 g. _5 U( V. |7 q8 k t.ModifiedPrefix();
% Q" @4 q# I) B! O4 c while((i<=n)&&(j<m))/ v! o2 ~: B7 L) J$ y! t. Q
if(str[i-1]==t.str[j])
9 X) w0 h' H! ?* b {2 O2 D) P2 I" L# K/ u/ X* W+ i
i++;
; p! K8 Z$ p6 W+ c: O j++;9 Q6 ?4 ]3 p8 k; V* O3 A% E
}
+ E6 J' d! S0 X. ]: ]/ X else , S; J U2 {! x0 P; }1 t5 [' Y
if(j==0)
* q% P: N \" Y+ M! V i++;; ^4 v$ t+ d% n" b3 F# d1 [
else
& x9 }0 [" ~ e j=t.pre[j];
9 @9 Q7 D6 r" I$ t& o" T* R if(j<m)
8 o6 v# M9 [- z1 Z+ Q return 0;: x, G( q- d2 Q) M* V' i, w, \$ I
else ) d* X3 P5 \! V1 j
return i-1;) e! E% @0 c/ v9 V3 U# b
} K+ @- r. ]% K3 X* i
int main()8 \+ b2 y1 w |' p% E; a/ ]
{# g9 ^4 H- Y$ m! Y5 D
if(in.fail())
5 g2 A9 d- F3 [% q* d% ^0 X: N' j* b {1 P6 |0 N1 d" H' a' M: p5 V
cout<<"the input.txt is not exist!";1 \1 c. p$ l, @( F# k% B) O
exit(1);}- |1 `; v5 e. W( u. O7 z. k6 S
int i=1;1 x# f1 U7 j# J* T
String s,t;9 G" }8 z) `3 Y1 {9 g
s.ReadString();9 A+ `0 e+ r$ Q B% t
while(t.Rs()+1)
! a; V. b8 E1 |, V$ \2 q* ^ {, S$ V* q/ Z+ K* \8 H' o4 M
i=s.Match(i,t);
8 n. v p6 f. l, z: V/ j/ }, m$ a8 F if(!i)) ^3 Z( k7 W4 H2 |& J$ J8 ?
{
0 V3 n6 L0 S" ]- A/ T3 ]$ } out<<"No"<<endl;
1 x! m& p3 g4 c* p! V7 x1 N! L9 { break;5 m. X( w! k( }, K0 N4 D4 g7 o9 |1 \% Y
}
: L! {4 u7 q* e$ E }, ? e: f* D3 j5 E J
if(i), L# f0 `! |4 r9 z& x1 Y' H. P
out<<"Yes"<<endl;0 {, {- [2 ]+ n2 ^4 ~" r
return 0;
1 e. g* n( c. u( N* {6 m+ I) }0 F} |
zan
|