- 在线时间
- 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>
" U5 t1 C+ ~* b7 d% v7 z< >[[/hide]</P>#include <iostream>3 h! x5 s3 n# |4 \* M5 {0 R K4 ^
#include <fstream>. O; F9 J# _2 g% F% x. Z% t
using namespace std;) A% Z: b/ ?8 @+ O4 |+ W# l5 _6 S" }
ifstream in("input.txt");
6 t9 Z8 C6 k" `7 l0 Yofstream out("output.txt");, z. `, B" j6 G9 k q" L; M1 F5 [& v
class String
( M0 n c& D9 b( `" Z0 L% W8 l! f{* a& k! N6 h( w# _
public:
6 O1 \! A5 F7 }/ Q, K String(char *s="");
! Y8 a, B) ^) e+ Z; s String(const String& s);# n, M/ b G& D) O9 t
~String();
' U) `; X$ Z1 `* E int Length() const;# j: {! c" z7 |" R8 l( B) U% ]0 P
int ReadString();
, T+ h H9 d. k int Rs();, E5 e3 j. {3 C l& T, v9 H1 n
void Prefix();* z7 r& n: F" a# ~ U: I
void ModifiedPrefix();9 q' s7 l0 o3 m9 A& @) p
int Match(int i,String& t);4 u2 g# v5 _: H: D* v; r
private:
4 { f* U+ W- ?% r/ b0 K char *str;
" N v7 C6 f# {6 K$ k6 U( o int *pre;
. f9 l. p! p* ?- a( e: p: Y int size;$ p3 |% n- {5 l4 b4 N
};
4 t! f; ^6 i7 ]' L' \! y; B, VString::String(char *s)( a- B) e; K3 [$ ?" ]5 O
{
8 k+ D$ B7 n1 o/ w# f. C) k size=strlen(s)+1;
3 L/ W7 J: X1 T0 H str=new char[size];
; h/ ~/ `8 K( I+ C1 b if(str==0)0 K6 i$ N% X, w5 z$ L9 g# Y
throw "error";/ S( I& ~4 T' G0 z* V% r! c
strcpy(str,s);
5 \# D% _# R2 S7 K2 ^ pre=new int[size];
7 z$ k, j: E9 s% K+ L5 T if(pre==0)
% \- G7 ?2 U' S, N7 Z throw "error";
) X& C3 Y7 F+ }6 c0 d2 h}: Q/ }; N+ @/ {4 S
String::String(const String& s)" [0 x; R ?* y1 [! z0 ~2 M
{
8 K0 @+ ?2 h5 N U+ E( e size=s.size;
( N9 @! f8 X1 A. q str=new char [size];
% w/ ]4 [ R' z3 y, t; a- Q if(str==0)" C& H2 p5 X9 y
throw "error";
1 g1 y+ P8 G% F' G. {8 n strcpy(str,s.str);
1 A- f# t5 m3 I1 W7 F pre=new int [size];
: a8 I/ r' q. Q* a4 c; Z if(pre==0)
h2 `2 D7 B7 g6 h throw "error";
) m" v% u2 B. S+ i/ q}; C' N" Y7 U! m; y
String::~String()+ g6 o0 L) X. C& D/ S
{
' |4 T3 h# r! K. X delete [] str;
! ?2 l( z8 w. C, p( @& |( e% b delete [] pre;8 Y. I! c# M; T E
}. {) b' d6 ]/ ~$ m
int String: ength() const4 g( W4 \3 [& Z, q1 D: M8 C/ a
{
+ B. X- F8 X/ N3 ~1 j- i8 K return size-1;
, Y1 f' _/ e' C V* ^9 b1 a! ~}
, o2 H7 _6 _8 m7 G$ {3 {' oint String::ReadString()# H0 W; N W% M
{' ^5 i! n# @8 x- e* H0 ]7 m- u- k
char tmp[256];
7 H A/ O1 b; x1 x6 G$ ^( { if(in>>tmp)
) p( U. o, `* ]$ X {& _* }- b' { h; b$ R
delete [] str;
6 h/ o$ K" y/ q7 s# ~" T( p( K size=strlen(tmp)+1;$ V6 [* Y7 J2 n4 M4 l1 w" R/ h
str=new char [size];
! I$ F! Z' Q! O2 u q strcpy(str,tmp);6 ~6 `9 Q: J" Z: K5 O9 a# g
return size-1;- L. B( d% S* _# p8 d* p. [
}5 ^3 i8 \: Q7 |% B, b
else; B6 c/ M/ _7 I& F/ x: G
return -1;
2 m7 V( f$ c; J- t}
! J8 m( b% u$ O! X* @$ Jint String::Rs()
9 E$ v! Z$ W- @3 B: y, a2 k. l9 X3 C: B{
& g6 e; s; J' ^% M! ?/ | char tmp[256],c;% d* m2 A) G0 R
int i=0;
, M9 D$ T' A9 T$ Z0 F while(in>>c)9 B) a9 A( D% Q9 R
{8 U+ ^4 E9 k0 ]% H" D+ G& A$ B* i& F
if(c!='*')
' }' {5 n. v* f* r- O tmp[i++]=c;/ q# {/ d. u! t0 w
else if(c=='*'&&i>0)
; e! [0 F1 B; K6 l( C' } break;" f) f1 F! P. @. p+ V
}
( `( i: p4 p5 ]& [6 k if(i>0)+ K7 G8 j# A" z! @. |( m6 Z
{
( l- @% I' r! e3 O1 K$ y; T* F delete [] str;, l. G8 c. S2 t( h! I4 `% k- a
size=i+1;1 V" F4 i1 W$ E4 m
str=new char[size];
7 E( y b" x1 m% | if(str==0)( c+ Y$ x/ E: W7 A1 h O5 ^
throw "error";
" N5 t+ Q9 R+ w, x- U: | [/ @ for(i=0;i<size-1;i++)& T3 F( o! ]' P1 r6 U, p
str=tmp; 1 {5 k$ q# J( T5 P, {
return size-1;$ I7 e1 N- g J- c' x9 u* l
}7 H7 u3 k" f+ n$ O' D3 t
else
1 ]/ D* y2 z5 d: u* L return -1;$ b9 c0 t1 L# r& X
}0 o! c6 n, C3 B) P6 b
void String: refix()
7 x4 `' a. \6 L0 N( r1 }: I{
+ R5 z- ~! s% l7 ` int m=Length();& r/ r9 u3 ^2 J0 @, g% \+ ~
delete [] pre;9 k1 H3 y1 g0 Q9 v
pre=new int [m+1];; t# I, C* |- L/ a$ p
pre[1]=0;7 z P1 t% X( d& ]$ M
int k=0;4 r |: }3 Q" e) r6 V
for(int i=2;i<=m;i++)/ p! z' E+ P- p
{
( B, p: `+ {0 ~" [# O1 ]; y( _$ }3 X while((*(str+i-1)!=*(str+k))&&(k>0))5 k2 S% N8 Y: z/ Z5 L' q# X& V
k=pre[k];
S+ Y: i2 |/ m# B+ w if(*(str+i-1)==*(str+k))' z$ d; |% \: y2 Y
pre=++k;
( {/ v: U7 z- L else
' x+ C( K# B' H! ?' H pre=0;! _! k: M, ~# f
}
4 h! u) k o# u+ }}: S$ B; q# J9 ` k% |
void String::ModifiedPrefix()
# ]! k+ S* ^. E) m5 M; y3 W{8 R. D. U( S( {) P
int *f;6 w) n5 Y; E7 J; K# o- c! n& m, |+ A
int m=Length();
0 [! n9 S( T/ u f=new int[m+1];
/ [% Y2 ~0 Y' `9 }2 [6 P Prefix();! g7 P. L0 L$ g& y
for(int i=1;i<=m;i++)
/ ]0 B3 z& q. F8 d {
7 P2 X a0 U0 c. l f=pre;
$ M$ m6 x$ D I h }8 q$ }0 }" N5 l" D
for(i=1;i<m;i++)' }( j: z5 Q( I: U) {
{9 M9 V% u' v3 W5 h. x* l! t h
int k=f;
! }5 z" k+ A" F' p) [ if((k==0)||(*(str+i)!=*(str+k)))
$ \. Q* e' X+ A2 z" N pre=k;% z1 N/ m9 _$ K& H& t
else
" ^9 W2 [7 z5 S Z. Y; i pre=pre[k];7 j* Q4 p! @5 b
}
" \8 |( K% N1 D$ C, d2 N delete []f;
0 O: `7 t0 m' g) ]: S# J) I4 l}7 b4 U+ v( m/ Z G
int String::Match(int i,String& t)/ w. r2 D. b* C, @0 \* n
{
, _* I8 B- D( N5 |- l# e int j=0;& _1 V( z- E% b, J
int n=Length(),m=t.Length();
, l7 O: f% s( M9 Q/ K c, p$ r t.ModifiedPrefix();
4 Z% o7 q7 J1 L4 e+ U: x while((i<=n)&&(j<m))
; Q# ?! i( Q2 k2 h' `/ t: f if(str[i-1]==t.str[j])" I8 ^* ?+ F6 z. C/ C) N3 z
{- g* U8 _7 g, {5 f3 p Q9 ~
i++;' g8 @, v8 L4 \. A# N
j++;$ P# [- U3 ^! {8 J
}
# V4 d( ^, ?" W9 h else 2 A. f) `1 |0 G0 z# R U! ^- E
if(j==0)# J* G, j" p! ^! a" R
i++;
* B. T% h% z$ j* @ h1 }, v else
* H* Y2 ~0 {) T! H2 f' }% Y j=t.pre[j];
, N, x, _8 D( k- i$ X, u* G if(j<m): B1 t, R- v, A# t8 c
return 0;7 K. \$ {; `8 x0 j8 K. N5 ]& _
else 4 u+ k4 q& r1 z' B# j) W2 T! g$ i
return i-1;( F( Y w2 C$ l, f* B2 u4 G ]9 Y
}4 D. H: N, ?- S5 H; J
int main()
$ y, }' G) J& K" Y{( C$ F1 S( _6 U# l5 K
if(in.fail())
# v/ y* O/ m/ L1 W( Z* q {
u, v5 E# Q( |, s+ i cout<<"the input.txt is not exist!";- \2 X7 k$ f: p3 C& j3 e7 i, [
exit(1);}9 F1 B- V% b% ^ `/ h
int i=1;
+ K. A, g2 Y }' w String s,t;
4 d( J3 S, X3 b0 s+ A s.ReadString();
. E) W0 k2 w; t* K; n; c6 m while(t.Rs()+1)' y, ^5 L1 ^6 ?4 s
{$ F% ]0 \1 {: |: @6 D% n
i=s.Match(i,t);
U9 {+ Z2 X$ _( U2 t8 C' W if(!i)
8 U. Z. Z) j5 W; I# _. ]" [ {
9 m; u: k- g0 T; b out<<"No"<<endl;4 P1 h6 _: J( R$ T. D
break;
3 |+ }0 M0 L% I+ M& w }
7 I$ {4 j1 Q8 g }
( b0 `# e4 ~( L3 L if(i), P, u$ a( c9 J1 N! ^
out<<"Yes"<<endl;: v7 A3 N5 b1 w% n* x
return 0;
# R$ o- _7 A. H, F( w0 }} |
zan
|