- 在线时间
- 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>
+ T/ j. B( X; d g' j3 @< >[[/hide]</P>#include <iostream>, w p; q4 U/ A* c5 i* a9 J; i( R! V
#include <fstream>$ |7 W' I! N! g( [8 _
using namespace std;% Y3 J Z2 |" R$ @+ [ A
ifstream in("input.txt");
5 R, B! ]% _* Xofstream out("output.txt");" y/ Z; R, H* I9 |/ j# ?7 o& M
class String" I$ q# X7 L6 R& s- G
{; v _6 j9 j- U" J' F- k
public:
# {" r/ y/ ?6 S7 t6 C String(char *s="");4 p$ _9 C5 M% |
String(const String& s);+ `; ~6 H# N, o& d# p- _
~String();
% ~, t% d7 s3 j6 ~7 x ?- ^' E int Length() const; T* L, {2 p9 D& J8 T0 |' L% l
int ReadString();& x/ V3 r( V! k; U
int Rs();0 c8 @$ \( |0 r- J
void Prefix();# a. a; C2 P' X9 s0 A2 \% X+ m
void ModifiedPrefix();
+ _& v$ h9 V) K1 {2 W int Match(int i,String& t);8 L% y" ]" U0 p( v% H. n w5 p
private:8 l A* P1 ~+ v2 P z! L
char *str;
. w/ m, [- F, \& e8 C0 `4 w/ S5 L int *pre;
- b+ p+ Q) z! v int size;% Y- e4 J# Y3 f$ V/ \( e$ R. h& T4 e
};4 I: y4 j$ L4 F. c U
String::String(char *s)/ v& K. d) Z3 ?
{
6 v! _9 z; |, C size=strlen(s)+1;/ y1 m+ e* H; [3 W( P
str=new char[size];" z2 d+ K& J# ?& a f
if(str==0)
* j( L+ x' q0 K6 O M throw "error";
/ V7 `* n9 h) M1 c strcpy(str,s);; J$ F; F, K$ Y; c! c
pre=new int[size];
: ]3 A$ |* |2 C5 j' C if(pre==0)
& s: n7 |) u6 Q$ N throw "error";
: B2 ^/ w" Y1 P9 B1 t1 n7 f: i; V}0 @8 I: Q6 L$ {, M( P
String::String(const String& s)
! D; z p& w$ V, j' g- C{
( k) [4 h. _; b* F8 W1 ~" ~; \. I size=s.size;
/ c9 S0 R. H2 O( ^9 b str=new char [size];
; i8 E* i2 l _" @: @7 {% m if(str==0)
# `9 d U" ~, o. ?! m2 ]7 { throw "error";; _8 `* K! ~5 ]+ ]) A7 h
strcpy(str,s.str);2 X" i- `9 f, R* h* B: u; o
pre=new int [size];
# v2 M+ L) ^1 n, Z3 I9 { if(pre==0)
$ A2 \# Q5 U% H; a) j7 g throw "error";3 T- i( ] N/ r$ z
}
8 S: f/ M& X. h& ~String::~String()
! H& b5 ~3 t2 I{7 V8 s1 u' h- ~2 ~# N6 x# b
delete [] str;
% t* R% l. [& T* A delete [] pre;
& w$ C' t) F j+ H; w}
6 X! [& B6 s, }# ]: S0 K/ m3 Cint String: ength() const2 D1 n2 w/ q" N2 m" A
{7 v7 Y Z. c2 ]3 ~& i$ X& ^
return size-1; c" D S: T8 {, A
}: r3 A, c4 \6 a- u- b5 I5 Y( D
int String::ReadString()
$ q( R. q4 R3 u4 z0 \) Z/ j{
n! J# C- S& b- P char tmp[256];! s, P8 k' Z% `* z1 s
if(in>>tmp)4 C D8 T9 F/ i5 j/ ^% V$ O
{
' P, `- z4 a* q0 f delete [] str;
/ W1 Y. h; |) C( c, p4 T- F9 O size=strlen(tmp)+1;
- p/ p ~+ X- K' J- Q2 [! ^ str=new char [size];/ S; |% m6 Z5 p5 a, }% `0 T$ d2 C
strcpy(str,tmp);
' ~9 f& A0 ~, L# L return size-1;
6 r0 M, E7 C# s, c( m, Y) N4 O# o9 J2 M }
7 K- h; j" T7 u4 a. ?$ W. N5 H else1 |& D8 i/ [& x, C
return -1;
9 [% f, {- I0 ?" l4 d}
' Z) r- K. X- a0 g) h9 Nint String::Rs()& V/ h( r% V/ O( \( _3 x
{. e4 m- W* E" L
char tmp[256],c;
( ?' L( s, k7 Q int i=0;
- {8 v- k7 X! y& y+ }/ T& } while(in>>c)
3 \/ k4 P2 L9 p {' K: H5 W) Y. B
if(c!='*') z k9 s4 D% o9 c: Y
tmp[i++]=c;
# S4 y3 i! X. S3 |5 R4 b else if(c=='*'&&i>0)
8 R' R# b0 S9 v! H, H# _7 N$ Q break; X4 H9 M/ N/ s# Y
}
# g& A+ j# w$ w+ G# y- o3 G if(i>0)
, h" Y: X v( e. t1 s& f* J {
! U/ H- l1 r! H delete [] str;- x: O- ]! ]* ]" \& K8 e0 [
size=i+1;# ]" D7 k y9 T8 f S N7 t
str=new char[size];$ C/ \2 }- A3 P
if(str==0)5 u% A$ @4 M# R* H3 J
throw "error";0 _2 u+ N' @( ^; D9 |
for(i=0;i<size-1;i++)# h" W# H3 C) k+ F
str=tmp;
+ Q6 j$ P( q* b. q: D return size-1;) P6 s- f" n1 ?3 V' y
}
1 }8 M5 R. ?7 `8 r; V else
2 ]+ x6 F& z2 ?7 P return -1;+ |+ o3 A4 `' {; N5 v, H, I: K' ?3 o
}7 n- w; X) f/ M4 x" J: R+ |) l
void String: refix()- h2 ~1 g S- h: `" q$ ]
{8 Q' y8 b; L7 [; I4 |
int m=Length();
% K, W' [/ {- | t. M$ n delete [] pre;
. y& m C3 t4 _- G6 F pre=new int [m+1];
, T5 b4 o/ e, k/ R pre[1]=0;
2 o, r3 s% V& ]7 t5 q int k=0;
/ ?( k1 r9 i& Z* L V for(int i=2;i<=m;i++)+ a2 C4 _! n; Q2 a2 g
{/ v/ Q% `. Y! r0 e
while((*(str+i-1)!=*(str+k))&&(k>0))
; w& N' l$ }2 u8 _% m k=pre[k];+ R, E& C1 y) A
if(*(str+i-1)==*(str+k))% ^$ r2 p; \6 ~" S: Y# r
pre=++k;, P% B7 J. \ g% O+ V" i1 ^
else* k' D: c6 c" f6 H5 h1 r
pre=0;* K+ _( j! y2 ]$ Q
}" S6 H" @# s, `3 A
}) D) _( e; R6 b- g# ]1 m( i
void String::ModifiedPrefix()
7 A E9 Y2 T; z9 |{1 q! {3 `1 H% {
int *f;4 b1 [/ y+ o; t5 k& k& x
int m=Length();
% y* q$ Z2 S }4 X- t f=new int[m+1];
6 k7 L M3 K s. a$ k Prefix();0 j; ~5 k* ^+ y J
for(int i=1;i<=m;i++)
1 f% ?8 E: `) U {
% ^: E W% r$ y" I f=pre;0 S3 E+ @4 y; ?7 B+ K2 K
}
' p1 `4 O9 o- H for(i=1;i<m;i++)4 j. T" W1 @- l7 j; a2 V
{
% M8 Q9 h& t' l- g" m- V; A int k=f;
" z' a4 ~0 I$ y e* [ if((k==0)||(*(str+i)!=*(str+k))) U, k Q t9 S4 A! ?! A0 T$ S9 j
pre=k;% v/ i4 q8 B* I, g! G3 H2 U/ g
else
0 ~8 X7 S( ]* p$ [' V7 y, y pre=pre[k];7 _: R$ l" Y# q' }% m
}
$ D3 q4 o- l& Q \2 P0 G, p delete []f;: o! I" x' J' ]/ d
}
- m g$ `% m# `( m7 W w' Nint String::Match(int i,String& t)8 W$ p9 e( o6 z9 L w
{
) v# k8 b4 }# d, u8 r f int j=0;% l) g- E' z4 w
int n=Length(),m=t.Length(); W% A& q% s% S& Q
t.ModifiedPrefix();. x7 d. f+ }+ \% h, s2 M6 W8 u
while((i<=n)&&(j<m))
. I. e& q2 Z3 n. A if(str[i-1]==t.str[j])! c( n& B1 k. X$ f* Q& E; D9 D% P
{5 @; b3 b. W7 X
i++;
* x' x) M2 _% e- ^ S! Q1 O j++;
5 @! F* e# |8 N. O }0 D' c( y6 x; v! U& R. `) A
else
+ x) _3 K! }- n/ {& g3 M9 n9 F if(j==0)0 u- }- {5 x* o7 N+ x& r- d& u
i++;& \+ p9 W$ h' ~2 W! O4 i) b! u+ n2 d
else - ?% Q& l# q8 V9 y$ z% q- }* x
j=t.pre[j];
* }8 w$ X! _! h& ^- \. u B @2 B if(j<m)
) e, y9 Z- A: I( i. H+ `( r1 s* H, _1 p return 0;
+ V6 b- Y% W5 E% d8 X+ j# C else
8 ~" @1 Y3 v! Q: b: P0 E$ m return i-1;
, Q+ u% }" {& ?" _; b, U/ w& z}
4 t y$ m4 F5 J7 e/ J' pint main()
, h* O+ H/ Z( A* s$ c6 z& h/ B. O{
1 s! ] S. ^1 d: R/ X if(in.fail())
; Y6 e4 _& T3 n1 ^/ [3 o3 e# h {3 L% t/ W* D6 s& s9 k2 H7 \
cout<<"the input.txt is not exist!";
; b. N/ a4 L; `6 r) p! E4 ? exit(1);}
% Y2 w; V- K6 g" A) h$ o1 I8 p int i=1;7 K5 ]( {* t2 f
String s,t;
$ P/ l/ ^: K# e/ G6 c8 ] d( P8 D* x s.ReadString();: ^% w# O E0 N4 _4 M
while(t.Rs()+1)
* v6 V2 |2 j% v! i. t {
1 Z: I. m- d! [2 ` i=s.Match(i,t);
- z( ~0 K& m7 M+ U& d if(!i)
& l# ^7 D) h* g; ^# n/ H R {$ F0 P9 C& i% b" C
out<<"No"<<endl;
+ r! E; w) N7 g; m+ P* } break;
6 u/ Q% r' [; x+ `# Y } p# `# e3 \5 k# P7 ^+ K2 t
}
& U5 U' Z' ?. H; r if(i)
; S& s! l: [ ~& c+ u out<<"Yes"<<endl;4 c8 H- H) q/ t9 n: g' Z, ~
return 0;
# a5 R/ h3 }4 X* f8 P1 P- U- Z} |
zan
|