- 在线时间
- 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 B' @& ?) w, f' Y3 l& n
< >[[/hide]</P>#include <iostream>; ?2 e2 R1 }- i; E
#include <fstream>
+ H' X/ e0 t# ]% \8 M7 Dusing namespace std;
/ H: ~: {( {$ d& J3 v3 \+ N: @ifstream in("input.txt");. u$ d2 J: h4 J* x1 |
ofstream out("output.txt");
8 q, K- y, e, v0 Pclass String' b5 `+ E; a2 {0 M7 L
{
3 n# `! V$ ~) P1 B0 l7 P public:1 ^# R- [$ k! s" Y' U9 j5 L
String(char *s="");
- q# _/ P6 P8 x5 u9 ~$ O String(const String& s);6 t T9 D' @9 F- Z% P- `7 E5 f+ Y( p
~String();
5 S9 Y3 e+ v6 M! B0 m int Length() const;3 P9 Z4 ^6 r# t- ^+ U: D' d: j2 Q
int ReadString();
6 v6 y& ~% T! y/ V. M/ R, o% K int Rs();
# z) w) {5 [3 x+ } void Prefix();
% f1 Q' M% H6 ? void ModifiedPrefix();& |/ C5 U$ b1 ~3 n
int Match(int i,String& t);
5 Y: U% f( Y. {3 v! J$ @ private:
4 } u( H) ^; q1 h7 W char *str;; ^' v% [. y1 m' {% t+ Z% G
int *pre;8 Z& C1 T0 O. }" D/ K) [; M7 c
int size;+ V% z( `# [4 q# V g3 @
};2 X4 o' t( x, X6 | @
String::String(char *s)
" b: `$ S) E ^# y1 ^{
( z$ U5 Z- ^4 H1 ^. _1 O size=strlen(s)+1;
' d' e+ H0 [$ b str=new char[size];7 H2 n5 X' Y) D
if(str==0)
8 J# M/ i! t" S2 Y# _ throw "error";" Q9 q* \; o9 b
strcpy(str,s);
& Q" }. Y: P# k% ~9 [ pre=new int[size];
8 F) s5 k4 ~. N8 K: E, n0 A if(pre==0)' f3 ?, p: u* d8 @! C6 M
throw "error";' H0 B. s5 I& t/ i: I8 p3 }8 D5 i
}8 k- z* K! @" U% I) I
String::String(const String& s)
, K5 X* n5 l: P* U: _# e0 U4 a{
- X# F1 d$ U/ R+ k+ O$ y size=s.size;! z5 C. A6 W- m
str=new char [size];0 }5 A! y! b' A0 P( s) B
if(str==0)
4 l. o! d: ~) C: w2 ~0 N5 E$ k, B7 ^ throw "error";# Y0 K# [# h# x8 ?! i9 _: t
strcpy(str,s.str);
+ `) h: `4 {% N& T pre=new int [size];4 F4 z2 V6 i1 A0 `: E: Y% l& n. e
if(pre==0), a$ G' _7 q4 M' r( D5 |
throw "error";, v' k1 q; K4 |8 N
}1 B; ]; Z+ b7 J O
String::~String() e! ~1 g- f" i* N, N s# h: A( p
{
' A9 U* A2 E1 n2 G( l% G delete [] str;' k# o7 i" d1 b! U. ]9 D5 ? b
delete [] pre;6 v$ T e% A1 M8 r6 D
}
5 d9 ~9 [- J/ i- Uint String: ength() const. b& L4 d; d1 C4 x
{" H! S3 N. F; J) j+ b4 t( J
return size-1;9 r0 Y! A* D% L
}
- N9 p" ?$ E( G Zint String::ReadString()
1 q4 z, g" j0 U{* u4 J: }/ {3 z; q
char tmp[256];1 d9 R, h: X. Z8 C
if(in>>tmp)( U. |# w2 r( \
{
1 e: S1 E& k, n3 B. D0 ^ delete [] str;
! R3 R- c5 n5 n; B) V size=strlen(tmp)+1;
+ w) p7 {8 N" W" l. m3 i$ m+ ? str=new char [size];
. x; B; x4 E) g. K- ` strcpy(str,tmp);! ^! G, {. @: Q s+ A; I; z5 [
return size-1;$ |/ v) \( o5 C( P" O; h
}4 X1 Y6 w( G! T g% F
else: ~6 Q/ W6 ]/ L G
return -1;
F9 G) S% h# F }! q}8 y% z v7 b+ V
int String::Rs()
: ^8 l- n; ^3 z8 Z, J' ^{; ~, l' A8 `: X; S- S* w
char tmp[256],c;
7 V8 X& N0 ]3 [+ H& e int i=0;
2 ^. j4 F& ]$ m3 d& ^ while(in>>c)( V, V& W" }- \* n" T4 L9 z, z
{( ]; L" N8 g: f. D: `
if(c!='*')
! N* s% k- B) V* |" L tmp[i++]=c;
1 q3 l# U, d, ?! u else if(c=='*'&&i>0)& E, C- j' ?% B, o8 `: e" I
break;) N8 x9 l+ ?/ S0 ?; s7 B' z! K
}
0 P# j" J8 Q: y6 ^ if(i>0)
u, u. @6 a3 F8 j4 u; [ {
2 |/ h1 R. V" v; v* @ delete [] str;
- P+ Y% R5 c5 o- x5 O size=i+1;
+ P4 W% [7 }" x/ p str=new char[size];4 o% O# g, U' F: x& m; o1 i
if(str==0)
+ W& p k% v. G# D5 H5 S throw "error";. n. s& C: J# G$ G
for(i=0;i<size-1;i++)" i+ Y& r5 U0 ^& x- j, q
str=tmp;
6 n' ? {8 ~/ I6 u) c- x return size-1;- \. t* j4 ^' v8 K
}4 U. i& W( q! ?7 ]$ W7 T+ e& v# y( P
else
I$ Y6 B( Y" f2 [- ?1 N8 O8 ~ return -1;' S- f; [5 X: [
}) x8 H# ]5 M# B" g) [
void String: refix()
7 o" T4 l( t& t+ x. t{' x" J, V# k: b
int m=Length();
9 T# Y9 B2 U/ i6 p; _ delete [] pre;
: f# C& j6 `- l- t( g/ w* y9 b pre=new int [m+1];" Q! W E+ R' E0 I/ ^% D( r
pre[1]=0;, ]/ ?, m+ B6 Y" w
int k=0;
( J% M* }' ^5 l" v* m for(int i=2;i<=m;i++)
L+ ~9 M; l: ]2 i1 U {
# |. o `5 H% ?* f while((*(str+i-1)!=*(str+k))&&(k>0))6 y K4 t3 V: \
k=pre[k];
7 T9 q$ Y# ~& N+ \$ k if(*(str+i-1)==*(str+k))
$ s+ j2 c! {$ j' B pre=++k;
7 N# E- @) N3 Q5 { else, r- _) r. N* K6 {/ G: Y; }. j
pre=0;! Z: F5 ?' X- v5 i, ?" q
}
% x, @' q. C! A/ ^7 e; q# i( m7 ^" t}- c3 n7 \' G# C; q
void String::ModifiedPrefix()
+ r- v. J% J; Z( h' h% Q- K{
5 F4 d9 S& u" |4 _% O1 {" z int *f;# R2 A. A' t- W- e2 q* H; Z5 v
int m=Length();0 P! n6 M) O; Q( @
f=new int[m+1];6 G& I Y3 \% u
Prefix();3 Q/ ? } o$ ?) O- _; F7 j
for(int i=1;i<=m;i++)) @- i" A: x4 q( M: p% S k$ b
{
; S0 Q, M6 A0 [7 P# D f=pre;1 u$ Q8 Y! W3 D9 m6 j/ S
}9 T5 b0 H( N: m9 V1 q7 I% {) n
for(i=1;i<m;i++)
! S+ l0 C. ]" |/ i; c {
+ M5 `6 |3 q6 P- s1 d" t int k=f;* D* \# q5 V. Y/ E1 V
if((k==0)||(*(str+i)!=*(str+k)))1 C2 P/ v; O8 |' f& t% M: Y# v( M
pre=k;! Y( j* v' a+ [1 ]
else
( o( R3 q, D$ L/ P( T pre=pre[k];" m" C d, p( P6 ~5 R) y" x
}
! }. s) x" c' R9 H5 y delete []f;
. N& I H q5 j, x* c}
1 c) P) X$ p6 N m+ @" @int String::Match(int i,String& t)4 Q8 h: |; V" u* u
{8 ~* R1 X1 ?4 ^, u( X) B" X
int j=0;
) u( `- Y" ~, F4 F/ g& U int n=Length(),m=t.Length();3 O7 v0 S7 A1 Q" c+ D
t.ModifiedPrefix();
* W) H+ u# r& ^ while((i<=n)&&(j<m))! S2 C9 a3 e! J: Y% |( T3 L. z' O
if(str[i-1]==t.str[j])1 v: l' @4 @+ C/ t
{
3 s( K" e' U. u7 l6 i2 S i++;& Z, Y& R) j% R0 Q2 r$ Y2 m
j++;" y, Q+ @8 Z. \; R
}/ a1 D1 @) g1 U
else 8 u; f, \. K4 f9 b
if(j==0)
% W, o; Q3 {+ T- ?$ w a5 V( [ i++;, v9 K! H8 \* H# T
else
; h; y6 {8 x/ Q3 H5 Z j=t.pre[j];) X0 g3 C a' ~. z# c* R" _3 e
if(j<m): |8 w- g. d0 \; ]
return 0;% H" x$ w3 O7 f, m% C& K+ Y
else
( e2 V5 Y! w0 \7 N return i-1;
. p3 T; Y6 x. B$ G+ H0 Z4 c}
, e. m9 N$ v* Kint main()- T+ M7 Q0 D. O
{
2 e6 p1 i0 J" ^6 o( f6 s if(in.fail())) O- }* Z( T K. K
{
2 J2 Z; s6 {& W4 B7 B( b1 p p cout<<"the input.txt is not exist!";
' L+ _( a: X* c% V exit(1);}& h" h% }% h7 W. D0 I; ?2 U8 Q
int i=1;
; v2 n" @- c9 j- ?8 \+ n String s,t;" m, r/ w" d" l$ ^& \9 Q. q7 B$ G
s.ReadString();! D4 x5 j6 r" J" r5 H( T; L9 p% D
while(t.Rs()+1)# m9 }( R1 B! _9 k+ J8 i9 V; D
{
0 P' q! `7 D5 Z- ^. U5 ?$ @) M i=s.Match(i,t);
4 T) [4 x2 }" P& z if(!i); \1 z" I6 M& y: {- E K
{) u3 M, m; Q7 E. n! j& S0 [
out<<"No"<<endl;. _, Q3 Q% z& Q# }( x
break;$ W$ b3 F+ g. f" f+ x9 x" n2 w
}
7 Q6 E5 c; ~* A! ?9 w) s3 f0 y }
+ c" S% D4 f0 e& [ if(i)# D/ X. a3 w: }4 s( ~) g
out<<"Yes"<<endl;
9 Q! V# j8 P: [. u( F+ C0 b return 0;0 ^' h. z, q* A, X; K q* y
} |
zan
|