- 在线时间
- 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>; V* ^0 c; h7 s" W* ]: |
< >[[/hide]</P>#include <iostream>
! F. O/ h# F6 g) l+ B- Z#include <fstream>
# g" z7 p, X* u. `% W, ~- B1 Susing namespace std;
0 t4 U1 [5 }$ Xifstream in("input.txt");) f; G, Y0 z7 X9 y5 R1 l
ofstream out("output.txt");1 b) A$ _ ]- ]7 U8 o* ?. J- d
class String/ r# g) i& W8 N% j' d
{" ~( F: b3 U" l3 T) X
public:4 e6 }" A& J! [' ]& o5 D5 o
String(char *s="");
! Y4 o+ D# F& K" S1 i6 S, ]' j1 [ String(const String& s);8 q1 d3 K1 x) N2 |
~String();! ~% ~: L5 |. p5 N6 O, \
int Length() const;; @ ]5 ~( j5 q7 |
int ReadString();5 n( a: S5 W7 G, a, O! r
int Rs();: Z& B) L. Y x& w# |
void Prefix();0 u: X' r. @/ R0 l! j- R3 }
void ModifiedPrefix();
% K7 D& `* W# n9 o. ~6 v/ {; b int Match(int i,String& t);. [+ a, r4 R4 r9 ]# u3 p
private:
7 i) h2 J( k4 B7 y9 D F char *str;
9 K% ~6 B# z2 W int *pre;
8 L; J7 `! o, t( o9 J/ W int size;3 S6 b; m+ P6 C3 w
};
3 I2 K) i- l" m) QString::String(char *s)0 w. ]/ M" N2 [0 h% o/ p
{
0 y# A7 k9 p- @' K size=strlen(s)+1;
, }' z' b# M, V% R, g w str=new char[size];
7 |6 T6 R) }, ]2 z1 S# ? if(str==0)
% j$ w$ u# I/ ^# x throw "error";
! ], O: |* k- L strcpy(str,s);
) P( W/ E6 ?# A! ]; R pre=new int[size];
, O1 A, z1 d- M1 z- |: I- g9 O% v if(pre==0)
( u+ D. K( F8 K8 K throw "error";/ I5 M" }- d1 ? \" H8 e- _' I6 o
}
9 a& B% ~ ?3 \String::String(const String& s)+ n% u( j& u# y/ a2 r+ w, `9 L
{1 ^% q+ B0 O" G, p
size=s.size;& [$ z7 \$ K- ~- m9 \ a; l
str=new char [size];5 D# ?; ~0 R% F4 S+ W
if(str==0)7 _- p& z( M* g- M8 V3 l: S
throw "error";! J. D1 |7 z: F' T
strcpy(str,s.str);
" S1 Z% E' X; t" y% X. V; Q8 Q pre=new int [size];
, o# n4 p+ a& @( B: F' e6 P3 l if(pre==0)/ n: t, {" \) ?
throw "error";
" e( V! p$ Z) ]" I( q1 k}! r( ]. }' P+ g; d& }* P
String::~String()1 F: v, u/ W/ Q- e0 |6 N
{5 V7 Y% i5 X9 \ E# {3 \
delete [] str;
( T( H$ h# f1 N$ j5 r9 A. w delete [] pre;9 w! A0 m4 M' n2 m5 r
}
. ]* z7 _% N( J! _% @ v7 Zint String: ength() const$ @6 V! q. `4 J6 @
{. r) l: e& P m. e
return size-1;
& \* k% A/ v9 R+ ?) T& N7 i; [}
0 m2 w3 v$ B2 n* E" oint String::ReadString()1 |! C3 Z# e) X" Z0 H
{* n4 G" |* P& t e* l
char tmp[256];) @) Y* P/ h$ X2 B6 f$ A- y4 ]) [
if(in>>tmp)
1 p3 d' _5 T$ \& `0 ~( k6 K; H {- n0 p' p+ l5 r1 L" b# R
delete [] str;
% | W2 N: o: O0 l size=strlen(tmp)+1;2 A2 j9 C7 Q6 P6 K4 b
str=new char [size];
* m1 w2 T3 f6 Y$ b( d strcpy(str,tmp);
' V% V% y( V/ r0 X3 k# x$ W return size-1;& [' q: g. S1 y( }, b
}! K8 d5 c) e+ I' a" u
else
1 {, d) ?6 }) u0 ^ return -1;
" B+ a5 J7 G; ^' h& O' a8 W}
8 y# A2 T2 T2 o" i4 v& M" `int String::Rs()" n, ~# w: N7 R
{
w& J, N2 m7 @$ j char tmp[256],c;
! \9 o% Y# r4 v, x. j0 t int i=0;, x Q) A3 A! p4 {2 S" ^7 n) a3 z
while(in>>c)# t. B7 z' o5 x
{
9 N! b7 ?& w# |7 |! z if(c!='*')
' v( W5 ]+ r% k1 W8 h7 r# ~* g tmp[i++]=c;, t& n* U* s# @# {+ j" A% R
else if(c=='*'&&i>0)
; N; m& y2 K8 l break;7 r2 { k3 w$ h. T
}
. O0 f3 N5 k& S) G if(i>0)
: w' o6 F1 \" J s9 E# e {7 n+ l: V* k; o/ B% H7 O( {6 Y
delete [] str;
. F$ s' V$ d( r9 p1 W* y& u1 u+ v size=i+1;
. Q/ {6 \- O" Y# ]5 q$ a str=new char[size];
5 a4 r& g1 g, F, O( G, d if(str==0); {: F$ ~ U* O' o$ _4 T
throw "error";
# V, P+ ^; ?) i1 N for(i=0;i<size-1;i++); m8 v7 g+ B0 \* E! M H9 m; G/ y
str=tmp;
& z8 Z; s3 {7 c, D return size-1;
5 ^3 M& z! o. G' A- y3 c }
& s, G, b* \7 L/ F7 d4 a3 m1 u# t else. v6 F4 F4 f* B; H1 f
return -1;/ L: O2 l# b0 S3 Z9 |% J9 }
}* j# ^- I& g- u3 k9 D# X" c
void String: refix() p$ C% M- k, i4 _0 {
{
; ], j o7 c4 r. n3 S4 K: d int m=Length();( r9 I% Y7 r0 ]% O. U( z9 E
delete [] pre;( S- e2 j: c2 f7 j( ^" ~1 j" m
pre=new int [m+1];# W1 W) s2 S! _- N; \ n
pre[1]=0;
+ ^& Q5 Q3 M# C# z y int k=0;! C1 _- X: C# L) N
for(int i=2;i<=m;i++)
4 z- C4 ~5 q# O% m {
9 a- u3 ?1 @. m: h) s7 G while((*(str+i-1)!=*(str+k))&&(k>0))
$ \0 R8 ^" {" I5 A k=pre[k];
. _# H$ V! J9 @4 f/ T7 W5 d if(*(str+i-1)==*(str+k))
- S+ X1 E: k2 B* a/ k pre=++k; ^' F* Y" z" u" p) k
else
1 V4 w+ t" l" h- K2 e. k' K6 ?4 m pre=0;$ m T5 F7 u4 W+ E+ D, i; G3 g- ~
}6 k' U" i F& t. l; |
}
* E6 d# j( A6 }. uvoid String::ModifiedPrefix()
8 }( g$ _0 S+ }! X* x2 L{
, ]6 Q' D4 |& C6 y' V- g int *f;
' c2 S# _3 ^8 r% a int m=Length();
$ [$ H( p. J6 \0 x9 J" W f=new int[m+1];
# s$ [7 U ^0 }0 v% z5 @ Prefix();% V) E" a2 \+ i( x
for(int i=1;i<=m;i++)
/ z* m/ U! o' V; Z& C) K) A {, ~: d% x, @; a% f1 w% a3 m
f=pre;) k) @# p k3 o7 D! x# b
}2 u( r9 m9 h# f, p
for(i=1;i<m;i++)
+ a, q3 A# {3 _. {& P( Q, q {
; F% j- m" E3 D5 ^. r: k: ~( f int k=f;$ X1 ^4 v8 `. [( T" s
if((k==0)||(*(str+i)!=*(str+k)))) n- S: r1 x$ L
pre=k;! J9 K) s4 @: S/ V5 g
else " J8 E! Q0 o8 P. n- ]1 j
pre=pre[k];2 ?. _& J0 n8 N4 @ r6 ^) }3 G4 @2 l
}. y0 j& P* F% D# p' }% Q4 W9 t6 C( Y
delete []f;4 [3 c/ H; M w7 w* P
}, z6 \ s) p4 X: b' L" ] `
int String::Match(int i,String& t)0 _+ \' z. r o
{
- d! B" |* Q" x int j=0;
6 r5 { m7 g: l: _ int n=Length(),m=t.Length();, T$ O8 ^0 y2 f, o! w; L* |0 O7 E
t.ModifiedPrefix();
$ Y& z3 m k, m while((i<=n)&&(j<m))& G7 ^& z' j* r+ [: q
if(str[i-1]==t.str[j]): B9 W1 x/ N. J
{7 D/ [- c, l' {0 Y6 \
i++;
" F S, m3 a+ @& o j++;2 t" y$ Y7 d0 z+ m9 Q. P
}- z/ r5 H4 _9 O' N5 C& H: _
else
$ P, ^" _0 b; a) D6 {) @ \ if(j==0)
, ^: w' t6 Y( {' H* {, a i++;
& ~: b* ^( d# i& B' o" \ else 8 t' n; h3 f$ W0 t" W& ~
j=t.pre[j];
9 y5 m; x; D7 M5 r/ g+ @2 X if(j<m)
b; B. N' Z4 X# B2 ]* B- M return 0;1 X% d2 E4 I5 u
else 4 G8 h5 u' m( `8 v' q( Y" ]" D
return i-1;
6 G1 ~; l/ B: z" `; J}( g2 w% E" \9 R" b- i
int main()
, O9 b& P1 P% V# F( ^- Z/ Z8 o{
0 N0 {% y# v. x if(in.fail())7 w- Z* g; Q6 }0 s
{
7 T- S* ?" k1 a; Q( O; V cout<<"the input.txt is not exist!";6 {; R. W4 U, f" ~( A& X3 U' C" N9 y
exit(1);}# B% l; h2 |$ x$ ~+ f
int i=1;6 x @6 J$ ^% A s' c, a
String s,t;
/ Z" u# B" v' `9 N4 E; U- K1 \ s.ReadString();
v+ W4 R2 ^6 D$ f, K( u while(t.Rs()+1)& a# y, l% w) c
{
: a( T% E! y% ?! G, `) B0 h i=s.Match(i,t);4 a) V1 f& v1 H8 P/ f. P2 q5 s, b$ P3 c
if(!i)- o0 Q A/ d e* Q- m; _$ p9 l
{2 ]; [ T+ |" i6 c6 l' c" c- i) Z
out<<"No"<<endl;
* B7 d( Q' }' m6 I break;4 X. i* ?( X. r/ x# W4 u
}# K* K# K. e; a
}$ H0 Z* R* n& o: n% C- e
if(i)! K, N% i2 M0 R: X5 i$ ?
out<<"Yes"<<endl;3 C% Q) n& e$ b9 V0 f
return 0;! O9 L* R1 Q# S: I
} |
zan
|