- 在线时间
- 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>
* e9 G2 Z" Y+ n, A7 h< >[[/hide]</P>#include <iostream>, i' }0 r6 P. ^
#include <fstream>
# n: z+ r7 ^8 Y7 Yusing namespace std;# e3 M* `8 h& k3 h) A$ c
ifstream in("input.txt");
+ u/ @, t! M3 Vofstream out("output.txt");1 \: B/ w6 e& W3 r7 N
class String
9 H1 Q. z5 M' X- `{2 \: D" M$ }0 N* Y7 L( `
public:8 l& U3 o% \2 L( Q" Z6 Z
String(char *s="");- N# v" I4 r! x) A( ^ i8 K$ v
String(const String& s);
9 g4 ?* ^ T) q8 P3 q& F ~String();
" T: ? T8 u' z; K; u8 m1 D int Length() const;
( r, U: q& e- K8 } int ReadString();: F9 F9 C7 X7 E' p& D
int Rs();
! ]6 Z( `' B- C4 H3 D void Prefix();, m4 M; |) _2 C: I" Z: }' G
void ModifiedPrefix();7 i( i; {8 N) J, T5 M; F
int Match(int i,String& t);' o4 [, O4 y* F1 g2 t$ P% l
private:
6 k. t' D. r; S5 l& l- Z# d char *str;- V! k0 e7 J/ _
int *pre;
; c) [: `) o% f9 a int size;0 u# Z6 Q/ R/ A) I4 b' o
};$ P4 P+ O7 x) L4 Z: j% a
String::String(char *s)1 h6 E$ s* @$ S* Q8 X" q
{) B( s$ g* H( @0 k2 n( g& F `
size=strlen(s)+1;3 w6 @4 Q: ?1 P! @, |( f
str=new char[size];1 c6 G' s: k$ h1 X6 u! X
if(str==0)6 M4 q& `9 L5 }" N+ o
throw "error";
2 i. b% v ?, I, n* n strcpy(str,s);* X( D+ |. r) N5 P- S7 \5 X9 N
pre=new int[size];+ w1 K, h( x! y+ ^, g l
if(pre==0)
8 H$ `8 g" g; w# ~" n* m throw "error"; f J/ Z( i$ F' j: {
}
1 S' g: w% i4 P& e( U. Y4 |String::String(const String& s), a( _! t" L& t/ H( F
{: a; ^# v$ |. b2 V
size=s.size;
! C0 h' R5 \. r str=new char [size];
- d: o4 h, ~' e9 K+ ^0 ?0 L if(str==0)/ }$ N+ W& C9 q! j9 E1 u6 m% G
throw "error";# n& I2 D) q4 d; b5 h9 r
strcpy(str,s.str);
: [! q2 B$ u& L1 j0 u' u pre=new int [size];
$ F8 o3 G- D* q- H" W& j9 U0 d if(pre==0)) l- z$ G- N, H( L
throw "error";# {" P+ t( K" N( f
}" g7 Q7 k" S' p! Q
String::~String(); k/ t" I9 m! L
{
0 ?7 X' I0 |! W6 j& c1 C! v delete [] str;
) Q1 I" s+ |+ F/ w- C delete [] pre;" \! {3 e; }4 K6 W% M( F. u
}
- T8 H1 E) |+ P" V. \: S, y; m" iint String: ength() const0 W; l+ n* n- a, ? _
{5 B- ]/ w$ S" M3 `$ q5 D
return size-1;
. g) _' t0 @& u# ^3 l& p}4 j: f: K& K& ?1 v; u% G+ U
int String::ReadString()
! d. Y/ A/ O7 _6 h0 `; b{+ u: B$ U) C0 w1 |2 c
char tmp[256];8 [5 r$ r- I3 D2 k
if(in>>tmp)0 [9 T4 A. v C
{
0 v( v$ ` m- {' H% ]7 | delete [] str;
* |. X8 {7 V/ _7 A, `1 Z; y size=strlen(tmp)+1;- ]( j a2 I. V0 s( `9 @( a+ J h
str=new char [size];
; ~- r& S- _4 v) t strcpy(str,tmp);0 H# `3 `/ G) ^, T
return size-1;
r$ E6 E; h2 ~, w# R9 I }, M$ A, |0 R4 l' w8 }. |0 h7 i$ W$ `% G0 V
else
$ M4 G. X" H) i( t3 K return -1;
. M6 o' g4 Z% U2 C$ w% I+ T}% ?" C4 k' r. h# w
int String::Rs()
3 ]* ?& Q" Z5 s, Z( i{3 Q& f a* C2 y! `: e
char tmp[256],c;
" v0 L6 ^1 @2 j6 A5 D int i=0;
0 k; s1 r* z3 }3 u" q- r while(in>>c)
M( w- }9 {# K! u {$ ~! Q/ `- f$ U( G/ W6 ^. W+ ?: g
if(c!='*')
$ x* m6 v, l) Y- H' ]& V7 @ tmp[i++]=c;8 p6 {; G/ z! @- I6 B
else if(c=='*'&&i>0)( [ e: b2 ~) i/ w/ Y
break;
6 Y1 ~* {0 Z1 T }
# h7 N4 Q. S! B. ^9 y9 T$ V+ l if(i>0); a& C4 o- ]( H4 g( v
{6 @5 f$ X( B' \/ Y0 n$ O9 T0 f1 z
delete [] str;
6 u) d+ m# [5 v7 X! A( A* k8 i" { size=i+1;
* A; a% u! x6 g! O str=new char[size];
2 O: L z1 ?. C J if(str==0): u; \/ l: h/ q2 }$ Y: ~
throw "error";
1 I, f- ^( `: e( N/ ` for(i=0;i<size-1;i++)
" p9 F$ w5 y: t5 G( ]- x str=tmp; , L! ]5 B4 Q, y: V) q/ M9 `
return size-1;
- A) L8 H' V. v" r! f1 a F& i }
6 {7 h+ g. s! a( l7 V4 y else
- Q& K+ s: d7 p0 k return -1;: i0 S# W. I9 \3 w& P+ \% z: I) E! r
}
! O. |. _) Y) j! f: {+ _void String: refix()
6 B2 I4 ~8 s t/ w/ H. b{
* v1 O1 S% D4 n' a6 w, g0 k int m=Length();: X9 @$ w [0 W
delete [] pre;" Q% b6 |5 U) D* u$ }# Z6 h
pre=new int [m+1];
; q; ?, |2 F* q$ i* l3 Q pre[1]=0;
: z% ?0 r! ]! j* U) H6 L' J int k=0;. f4 I2 F) M1 l* a" X# w+ [
for(int i=2;i<=m;i++)( H' A# p) H, p+ n! n# ^0 q! C
{
* \) ]# Y) B/ R, p: j& p" I while((*(str+i-1)!=*(str+k))&&(k>0))
1 [/ {6 k! `& A+ K7 |( s7 J, P k=pre[k];$ h6 h/ c% h# p u; T
if(*(str+i-1)==*(str+k))9 L& ]+ `1 `; E. |5 m- _; ]
pre=++k;9 c. D# t2 ~( ]6 ~: s w, S
else$ E- f1 C5 I2 v- h
pre=0;4 d. l2 x" q. K) e4 c& }: Z
} Z. n% G% Q$ ~( Z1 Y; u
}8 K: ~( p1 g3 M X
void String::ModifiedPrefix()8 o" t. D4 Q9 C( o! I3 {# ?
{
: P2 R6 C. H" O$ J6 x) y+ E6 z int *f;/ R% O6 z- T/ R$ D( Y/ F" N
int m=Length();, i, Y! L. S# G3 ^/ a" R; w
f=new int[m+1];& q* g" y6 u2 G! _
Prefix();( G, O! q# k! F+ I: e$ Z
for(int i=1;i<=m;i++)! _. x& w8 [3 C9 I& j5 w& z
{
7 m! e4 c! p4 Z3 J8 i f=pre;
$ ?# @& ~( ~5 r+ h0 X! `9 z6 L }
) ^4 d( Q e5 G% f for(i=1;i<m;i++)
5 I$ g i( |: y. p4 j* C4 q {$ I8 g9 ]0 b8 a! O" j W" K
int k=f;
: u* h! Z1 y0 {5 B2 ?& E if((k==0)||(*(str+i)!=*(str+k)))) n) }5 G5 o( L9 y7 m! Z
pre=k;: J1 l4 ^3 T# |9 r* A8 t1 l# I4 B/ e
else
3 z, G" _% a. f* J" ^9 w pre=pre[k];& Z2 _: L9 T Z2 N' v: [
}
; S* d( y4 Z7 s( G9 ?' N5 v delete []f;
! B5 ]! o+ r# L4 `( B) j! s}
- |4 `- p% J# Z( p9 L* ]8 k3 Dint String::Match(int i,String& t)
# w1 _, `$ B0 p* t) l, t. D) }{ X4 d9 E& a$ B" E- Z3 P& o2 J/ s
int j=0;
1 M. I# ~) ^: C% V# a! Z/ m int n=Length(),m=t.Length();0 @# Q: a9 W0 l) L7 h; d% y4 t
t.ModifiedPrefix();4 e# }% l' [0 D6 F, x
while((i<=n)&&(j<m))! O5 N! L; H" i0 I2 l: W
if(str[i-1]==t.str[j])2 c- |$ p7 [5 n8 b1 x( S0 z* M
{
2 X5 L4 A; l: T i++;
% X. k% k, M2 d: A/ |" T0 d j++;
/ ]/ m2 q: K$ ~( k* @- C+ m- a4 t! a }& n# p4 \" e2 J* o0 `
else 1 Y H! u5 J- M# z9 K$ g
if(j==0). x T4 F7 |3 G4 T/ Q0 ^6 A0 O
i++;% \( ^$ U$ S) I: I0 O& g# F, e
else + o- d t1 }" Z( F
j=t.pre[j];+ M$ I( Z" {8 H4 N5 ^! w
if(j<m)6 `* }$ M/ L# I8 {& ?$ Y6 _
return 0;
9 z/ Q. {) P o } else
/ ^3 ?5 H: |, G) r. {) a return i-1;
' P# b% \7 y* C; w( F. H}! o# F1 [9 y$ b4 f& E! I* l4 y
int main()
# t Q* f* e- E1 N9 T3 c{
0 A; n1 i5 A: }; Z' g: c8 _3 V if(in.fail())! _( H+ H! }+ D- X. R# b) j, I
{
* V! |3 N, q# j3 n) J& @4 j% O: j* { cout<<"the input.txt is not exist!";& E7 C M1 l: J$ _, u
exit(1);}
) N; w! I$ }5 t( I0 L3 n: h4 I int i=1;& u: U2 m8 h" \1 N R
String s,t;
2 ?. y3 C, |0 \ s.ReadString();# i- D: y8 C" s/ g% ~
while(t.Rs()+1)2 f) [! C* i1 V* d
{4 m6 l+ Q; n2 e$ p) ?) E# w2 k
i=s.Match(i,t);
2 n; e( }8 _* c4 E o if(!i)
' \8 J! d! e" d4 f" a% I. N {1 B, s% `8 Z6 M
out<<"No"<<endl;. [% O' U* n* G$ U7 S$ P
break;& R9 Q {; a: C s) I% y2 E
}
# F+ o f) N* F4 q9 u6 c% a }
/ v- B, V' [: A& b if(i)
. l% v6 j- ]4 j' p7 o! L- I out<<"Yes"<<endl;
7 W [" q2 J0 S return 0;' \: H6 r3 \5 {2 t0 f
} |
zan
|