- 在线时间
- 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>4 j) ]" u) E. }- d* d
< >[[/hide]</P>#include <iostream>/ j; A3 b7 U0 R+ a
#include <fstream>6 g `" {' W$ R- l1 o7 e# U% \
using namespace std;
2 y* C1 g, t M9 Eifstream in("input.txt");
5 V5 K) N7 S. P' A" [5 q% g; h( L5 gofstream out("output.txt");3 n7 \( k) p! e R
class String. s. w) |2 X' F% A3 |' Z& A6 b
{
! d9 A& Z) Y5 K+ s# v& N a4 { public:
* J* ]& f% h7 I9 x/ C. I String(char *s="");
& o* n3 ]# S0 g& u$ ` String(const String& s);6 u8 I! }0 N& t( W! Q
~String();) U8 u+ ^. i" s
int Length() const;) V8 l& K! j% Y3 T
int ReadString();
2 v% A. D& F/ E; v" b0 y8 n6 H int Rs();5 p& |& O" }( n
void Prefix();6 s- ]8 _3 _$ {: A7 c
void ModifiedPrefix();" y$ u5 r2 O# A# j- M
int Match(int i,String& t);% O: r' }+ V' H4 _( H
private:
' x f" \0 t$ O3 O* C: v( A char *str;
* O5 j {7 B9 v5 E) n8 ] int *pre;' K; h$ {$ T: K+ `0 S
int size;
3 o1 s/ ~5 ?. b. m6 M};
3 u/ T" X* v- S. R# }5 e/ XString::String(char *s)& L" _+ p3 s; M( Z4 |! r
{
) A; j3 S1 g- n* F* | size=strlen(s)+1;6 E4 t3 S+ k; @1 B$ Z
str=new char[size];; c" O7 G B$ S; E/ [
if(str==0) {1 n' b8 A- E# I r" O: X
throw "error";
$ C' A# [1 H0 x strcpy(str,s);* c; |0 h) P y2 w) M
pre=new int[size];( b% I" H6 J4 d( H _3 m7 v
if(pre==0). Y8 V% P6 R4 t& d" P6 k4 q
throw "error";0 B: X2 n' ?* w/ N+ F9 a0 R
}$ `$ E7 a, C. D- k9 i2 D' ^
String::String(const String& s), x6 z% k% E! l, a0 V0 ]
{6 E0 v1 {( L9 W9 `
size=s.size;
' [+ _9 ^/ e) W% E str=new char [size];2 ]2 S" P: H& S+ }9 j7 d
if(str==0)$ [! J+ z0 D d/ t( k4 i, k
throw "error";/ {: U& Q; V9 [
strcpy(str,s.str);& m% a# U- A7 N9 \( M+ z2 d% H# Q
pre=new int [size];
: g! X# a: O1 j$ M/ @6 ~% o if(pre==0)5 S9 s$ G$ n" q
throw "error";* K% c; x% b% b6 p/ J* ?" D
}
/ s/ T# `) k6 U3 z) XString::~String()
8 E6 [2 w: F! q- y- ^{. c7 x! m9 i C+ Y5 M( |1 c
delete [] str;* j$ i! ]* X. F y3 r
delete [] pre;$ j) n+ S1 `' u8 [9 i- H& n! p2 j
}
3 S ]! e1 H4 j/ }) p( F; mint String: ength() const0 Q6 q& ]7 W6 s. ]
{
5 G; w" Y2 I* c" E, T! u2 D return size-1;* x7 M; R8 y0 E8 {! h
}
# y9 C |' \$ ]- Sint String::ReadString()
. L* ?& D' C& ^) s) `{
& I! T, t. l2 e4 C3 {- C+ e1 N! x char tmp[256];* t4 `/ Q# W3 w$ m3 j( C" f
if(in>>tmp)) w. t5 K, A/ H8 U! O
{
8 M0 g o& q, k2 g delete [] str;
4 d! o% S$ v2 J# I# v size=strlen(tmp)+1;
, L/ e6 i7 L9 H) J3 l% I. ? str=new char [size];
, K1 N' R, I, J, Y8 o# G4 _ strcpy(str,tmp);& q0 M; v$ a* x; I. }. a
return size-1;6 T3 x6 K: v: @8 i, X8 K# H, t
}
) x$ e% @2 J, \0 J- H else6 p G2 m' Z S. k3 p
return -1;
2 C5 q, l2 u0 D/ u6 \}4 E7 {! g4 a4 _# k1 @: ` O3 ^
int String::Rs()
& Z& Q' g3 R+ a% j8 a{
* ~" ?5 e. U! t# Y- g) N char tmp[256],c;
& k3 b5 a# D; } int i=0;( D, ?; `* u7 J
while(in>>c)9 I3 z1 S, ^* g" A' j2 v
{" \& T- P/ Y2 K* h" q' h6 ?
if(c!='*')
+ _; [4 m" x4 R; x# y: E tmp[i++]=c;
, F2 A, y. L2 Y: O2 y else if(c=='*'&&i>0)# L8 ?/ v. H# r7 }9 ?. w6 h
break;
: u' A$ F1 T( h% W# G2 S }" C4 u% \: Q4 g! c# z' V
if(i>0)
[! ]- D# E0 h; l {
4 J7 F* T3 G' {# u delete [] str;
& ?3 V. v! |& j3 y6 ^ size=i+1;
8 Q8 y- c+ H0 \2 D" U' ] str=new char[size];6 n$ o- S1 z+ q3 R# X/ a6 }" E
if(str==0)- `8 G/ \8 D( W3 y$ [
throw "error";
6 O& b3 r+ t6 | for(i=0;i<size-1;i++)
# _5 I* S$ } E4 B4 F str=tmp; 9 q% m6 A0 M* g* @$ e9 M
return size-1;
. J; `- L2 ]4 \" q! a }. q @. c7 l/ o8 k+ G
else
/ d8 k ^2 s1 s- A O) u M return -1;' M* O0 y' E( g O, r
}
/ H6 ^5 I9 O& q7 b6 _/ Rvoid String: refix()
: \7 G* l2 I8 C4 \( q0 E{
+ f, J/ x. H) I; T! J! T int m=Length();
- n- Q; ^8 B& t6 x I delete [] pre;2 {( U3 P3 b0 i7 H! A
pre=new int [m+1];
8 d" H( v( S/ ?3 U+ P! G* c pre[1]=0;
; @1 m$ E: |- G& Z; E int k=0;
}3 I6 N( B3 r, _ for(int i=2;i<=m;i++)
8 d* e5 x- x; A. p; Y {- Q1 ~0 X B2 h( p- \* Y6 ^
while((*(str+i-1)!=*(str+k))&&(k>0))- C. L; O* l" X+ E
k=pre[k];- X$ \7 j( z1 _8 [2 Z. X
if(*(str+i-1)==*(str+k))- \0 R: Q; o% e
pre=++k;$ M0 o7 y% I8 U( _# M. \
else
. y+ |4 l0 |$ n5 W pre=0;
* X0 W) m' Z. n7 N. l }/ u" O2 `$ U( @$ N. X
}
6 h+ B ]* Y$ j' O0 @) L2 `void String::ModifiedPrefix() |% Y* {" U" }( i. \
{
' ?6 U4 _( i4 U) f# | int *f;( Y! g1 U3 b, R4 d& T- i
int m=Length();
) P$ h' E- t; J f=new int[m+1];
7 ^( i, Y" V/ A% x Prefix();
: d/ g4 p3 Y O6 {6 V/ f) @ for(int i=1;i<=m;i++)
) b t+ D' m6 ^4 ~ {
. y7 U, D! f! I5 K f=pre;
6 a7 Y1 S$ Y( h+ q' T* W }
* F& Y3 U2 b! ] for(i=1;i<m;i++)
3 p2 E$ M8 }& H* ~$ G6 P7 o" s% n {
p) {8 Y, C' F int k=f;/ u, U' g1 s5 f8 t
if((k==0)||(*(str+i)!=*(str+k)))
9 l N. c! o6 |3 R& x' R pre=k;
$ M, u! U# P7 D L8 W2 e else
% f% O; P/ P: a% f9 e, k2 e pre=pre[k];/ c. k" O9 W* [& Q1 ~8 ?4 U
}
$ j4 H4 q% K2 u# n4 w# O delete []f;% [+ c2 ~. }& m. @
}
8 @0 Q0 m/ \( \+ Y }int String::Match(int i,String& t)+ i* c% K1 c+ x, a& l. B' Z' @
{& z3 t% h3 y0 l, Y
int j=0;. M8 w/ N: Z- O3 k
int n=Length(),m=t.Length();! E' D1 y9 u6 k1 u) u: l8 w3 ^% @0 E
t.ModifiedPrefix();, w1 ~) [- K. o7 y. I d
while((i<=n)&&(j<m))% g: c, }. F; f# E
if(str[i-1]==t.str[j])1 K7 T0 A& h8 y4 B* K" b9 f" Y
{
# u6 }. K+ ~/ }3 V# G! j i++;" I: b" X* L4 p# T) X" h
j++;; P1 u9 m& M' J: g& H# f0 R
}
% q2 L5 M. A2 @! c/ R( P else ! a! j* e- }& n! F% A. f. J
if(j==0)
' n& C& R0 h f i++;
: e+ C+ t( j, I" e( | else " b3 O4 S- F5 g3 v
j=t.pre[j]; f$ E' M/ @& L7 R* L
if(j<m)
, b0 F0 l/ r0 f9 d) f# l: u return 0;" H* R) W2 P5 X8 M7 S2 k# ]0 q
else . ]+ `4 w3 Q3 g/ ~
return i-1;
; s- z! S0 M; H" c. W+ m}
e U4 ], S7 c3 _) E( Sint main()
' a' g+ r. A9 B/ q# r{' ~7 M; H5 ^7 N
if(in.fail())
6 o% u# W& @7 {- c& a, m3 }0 | {! a: S0 ^3 o5 G+ Y! T: g
cout<<"the input.txt is not exist!";- { \; A" M+ @6 w
exit(1);}
& k* A1 J0 h5 }% |0 Y int i=1;
* e/ E0 E6 V5 k6 t7 ~2 D, _, G String s,t;
! o: G' }0 J& Z( U. r/ i s.ReadString();$ ^* r9 L$ V8 Q3 D0 z
while(t.Rs()+1)( ?; ~7 m) C) W, K3 z. J
{
9 V) [4 H# B$ f3 E4 s i=s.Match(i,t);/ r' T0 Y# ~' c$ C! Z0 F/ q. ]3 ~
if(!i)' E6 r5 K; n/ d" p, ]
{! Y* [$ Y+ a2 o/ n5 }
out<<"No"<<endl;6 @# I# {2 ^, S9 h
break;
6 K/ y+ c3 R& k1 J% o! C }$ K/ ?% ~. p! |
}; i0 W, e. B4 M4 c3 G9 K! b
if(i)3 s& ?# o+ W1 k) P, g* C
out<<"Yes"<<endl;
5 b" a. z9 X) s; `. v return 0;" w9 O+ j8 N; A$ d4 O( z
} |
zan
|