- 在线时间
- 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>
6 o& ~' m; _) d* U<>[[/hide]</P>#include <iostream>& z! {% P X8 q; {$ _7 S7 T
#include <fstream>; v; n! E6 \- b
using namespace std;7 P7 J) \; X1 P1 l2 y8 Y; L0 m
ifstream in("input.txt");1 Y. N3 i8 o3 \* }9 R
ofstream out("output.txt");
/ j& e' N/ C0 t+ _class String
0 W8 c z7 O k; \& |$ @{6 o" i6 t; ^ }' i( V& h l
public:
w$ e! ^2 P9 a# |/ l* m String(char *s="");5 a+ {/ e B0 y
String(const String& s);
& ~- U; ?& B9 R/ S. B- o ~String();4 S' R4 U) o& ?( `' O. p
int Length() const;% o( L$ i* G/ [8 t& q8 x# V" z
int ReadString();
2 C: ?, F& Z5 ^) @ int Rs();' x5 {3 F1 \1 {) V9 h! D1 H& H6 H
void Prefix();
C$ u( K7 u+ y) i% ~4 Y* u void ModifiedPrefix();
, Z* i9 I3 R# y9 S int Match(int i,String& t);, [: u. S5 {7 j* P' v
private:0 c0 h4 s; J( j" {* ~0 w
char *str;. E, }7 m5 H8 u* l- N5 {* A# F
int *pre;- _9 k* z# h8 e9 A( _
int size; r6 u- I( ]* [6 r
};4 ]- H v( B7 z* {0 a
String::String(char *s)# L* c6 v( a( B
{6 ~8 z7 s) w) J* k. o6 R/ Q! `
size=strlen(s)+1;% O# M! H7 d: L& R% b5 _
str=new char[size];
% d7 n8 [0 {0 b/ k! z: U+ F if(str==0)
8 R1 f9 t$ _$ `% s throw "error";8 s% T ^ O; ]- A2 e8 p: V! z& R# I
strcpy(str,s);2 {2 \8 i& {# ]
pre=new int[size];
" e) V8 W8 D5 ~7 m$ R if(pre==0)
; d' t$ H: x! h5 n3 v) Z' y throw "error";
. E5 D& x, R# i# T! z}$ P$ ^% u2 g( j7 f
String::String(const String& s). r# w5 |# J; j6 L
{
) V* ?: c. W1 W) N* M4 j5 s9 s5 v size=s.size;# c9 c0 E! H4 v9 z( b; p
str=new char [size];' c/ u! X) i4 g: A3 i/ V
if(str==0)
. K2 b x- _" p0 f/ k4 ] throw "error";
- s+ |7 S3 _7 G) T) l5 j strcpy(str,s.str);) i" \1 y" N3 f c& z- F
pre=new int [size];
+ I7 E, I& L$ j7 H4 W if(pre==0)
3 c- j, c l- `; u$ _( B5 j throw "error";. z& z1 q$ h; {% }" ~1 H
}
8 [2 ?# D7 J9 Y$ y4 U1 o9 aString::~String()( M( _6 ^) Q' i" Q
{, q: _% [6 f- j3 L8 o6 E* J
delete [] str;
$ b: {1 _$ w% W N+ a! ] delete [] pre;
0 s. Y0 u8 Y3 z9 ]! U; i}
. w& `+ Z5 t3 H6 u" z1 J) U& I4 pint String:ength() const
& U& p" F2 o# p4 u) T. k. J% K{/ x6 i7 d* ?2 R- R% r9 k5 ]
return size-1;
/ D) M1 z* K" G3 H0 a2 {}
) f0 R0 U9 i; Q& M: h, a; m4 v& Mint String::ReadString()
3 o- \$ K5 |4 s/ g9 R" y/ }* i/ B{
" z3 Q/ g: V; @0 G char tmp[256];; j$ A; i. p& c& R8 u
if(in>>tmp): w* m# O6 q& S* l3 `
{
1 h8 @# l- m: W3 p% g7 K& z delete [] str;2 J/ I$ c9 r; I4 g& W2 X8 H
size=strlen(tmp)+1;) o: e+ n% e% ~& {7 r/ s0 Q f
str=new char [size];# y% t& \7 P6 t' _* M% o/ m
strcpy(str,tmp);
6 T) ^. e' X( m* f0 S return size-1;
) C+ X/ a* E& Q' u2 r. `) f% B2 W }9 _& p8 N+ i) [2 U
else) ^3 M% m' }# _4 h# z% }
return -1;
0 p. Y& l. U. j8 H$ x" R4 |}0 R- v- J. c Q
int String::Rs()
$ H; H: m: K; }* m4 d5 I{9 Q4 Q# H k0 y+ H. A% v
char tmp[256],c;+ G2 ?% Z2 s( g; }; w X m4 X0 l; L
int i=0;
0 w1 j9 v3 \7 p+ @+ j* K0 w8 X while(in>>c)
) R/ ]1 d$ i2 P: p0 h4 B& y {
2 b H' J3 f# B0 V if(c!='*')
# t. c3 D4 C u1 k0 o' [- Q3 B: x tmp[i++]=c;6 g/ ] W& {' W8 }$ y7 s8 F
else if(c=='*'&&i>0)6 `3 K* b6 l# T
break;
- r7 l1 s7 |. L: N2 y( A }% `% n$ h5 w+ u) h; z5 `
if(i>0)
3 _2 T! l' H* y: P+ O1 \ {
2 P2 s6 L$ m6 O! w' c$ i1 W0 ~ delete [] str;. A/ Z2 |+ b0 x& l1 y
size=i+1;) b4 A9 F: h8 I
str=new char[size];
# u- Z# Q ^- |) _0 c1 F; n: G if(str==0)
9 a- O" _; f' D4 x/ B throw "error";5 p* m. }6 J7 v2 t) O' J; w
for(i=0;i<size-1;i++)) z3 U& q3 `; r8 n' C: b [5 i
str=tmp; 5 J" C S" s. Y) t
return size-1;- i4 A% r: t6 u3 r# ^& s
}
& g* C* L2 a) K% ~8 C2 m5 | else6 N/ N& b' N( G, E T: k' x
return -1;
) e# x# X3 J" p4 ^* G: y$ L}& n \9 ^+ \+ _3 U5 Z
void String:refix()/ O5 a- F! p( v, r
{
9 i5 A, q* t* F# T# P F int m=Length();& @: S+ q I; a7 A. e1 r
delete [] pre;
5 i/ i$ {/ ~# l6 H7 p# r" ^ pre=new int [m+1];
R( K2 V) \" B$ _, f pre[1]=0;/ c, n z. B7 e3 H5 v
int k=0;3 D# I( g: T+ B6 N! Y* t
for(int i=2;i<=m;i++)
, e7 Y( s5 k3 l: ^$ s {
. p$ b/ e$ E" x" r8 w% i7 d! v while((*(str+i-1)!=*(str+k))&&(k>0))
n% j5 h6 e2 R7 ^1 L k=pre[k];
; ~) h& Z0 c# g6 s6 H if(*(str+i-1)==*(str+k))
5 l% K- G; j( w, y; E, @5 S pre=++k;0 n3 Y) k7 k+ L- m0 Y) O
else
% O/ B. U3 p: [3 J pre=0;
. a+ b, v4 N- x2 s2 p }% u7 t2 J6 C# [( o# [
}- y f( z$ A: g" Y7 n7 t G
void String::ModifiedPrefix()1 r1 _1 n* G0 w
{7 I. \3 x$ X1 Z# ^) w$ {
int *f;' v" E7 S6 p$ V( _9 J
int m=Length();0 ?1 {+ S) D) \$ Z; d2 b6 ^: x" y, J' F" u
f=new int[m+1];
3 `! L" _1 S) M: D$ m Prefix();6 R* J% T5 U2 S- B1 R+ U
for(int i=1;i<=m;i++)3 Y( S$ @3 Y; L8 e
{- R- l# \( Y! t6 U5 `3 X2 P
f=pre;7 S5 g# ~" R. b
}1 H( F# ^0 B5 U$ |9 g8 p
for(i=1;i<m;i++)
# G- U* v% f9 Q' @8 F# y6 H {9 Q* z8 _" `* b4 ?( R* Y
int k=f;
& l w$ Q% {/ A. F2 W if((k==0)||(*(str+i)!=*(str+k)))9 T4 k; `0 a9 f+ _# T; \2 M
pre=k;7 m$ P/ o3 H* G( t- i4 X& _8 D$ d- X
else
2 j: I7 m1 K; M+ i* h8 E pre=pre[k];0 ^+ E2 W9 Z" b# H- }" k+ O% u
}" a& g' H* `: A5 A3 l
delete []f;
x$ ^' A& q/ {" B/ x2 a/ q1 Z}; q% p0 n6 Q# v/ I( g( E; v3 T
int String::Match(int i,String& t)
; i& l6 Q1 S8 f. a, g0 Y6 R{( B/ V/ e; V# s$ m8 l9 I# e- X) B
int j=0;9 B( n$ n2 o& K" Q& E/ J
int n=Length(),m=t.Length();
2 L v; g# t9 r, ^; j8 ~ t.ModifiedPrefix();
) t! m* V1 `9 X5 |3 j while((i<=n)&&(j<m))$ f' V6 c M$ A. ^
if(str[i-1]==t.str[j])# I5 A [& E& b! K; v3 D Q
{
! t! @+ P# Y7 y- Q0 C& P i++;
2 P1 S! o/ x& A. f: H) C j++;
4 G. X$ ?" V, i2 j* H7 F }$ o$ s) ?; @" U# P' U
else & ~# R+ P& C2 _ h8 H k4 x( l
if(j==0)
/ V% b# [& r2 u. N' G# b0 p i++;
. x. u5 i6 P$ R: S& a2 H5 Z else
2 d. b! I% {8 a1 w/ b j=t.pre[j];0 ` V, L! X; T
if(j<m)6 ? e% P9 o$ @
return 0;9 j* i( I, D, a' K1 {
else 0 p. H8 G, D- u% p' V; F2 ?7 q
return i-1;1 W9 h' l* ]( ~8 q$ _! Y3 m
}7 ?" m( S& I" K1 C2 [
int main(). n$ Y$ n1 m0 W6 b( L1 L9 D
{8 X6 V; z+ n! Z% K6 f
if(in.fail())6 W2 i$ \3 _2 v2 ~1 Q4 L' g
{
" t8 J: A. O% ]0 S/ o: j cout<<"the input.txt is not exist!";
2 A7 i+ ~5 J# Z( K exit(1);}$ b* R( L# c, J4 D& z: P
int i=1;1 @' X$ }. R4 a+ j8 h _; h
String s,t;
) d$ P& u( c( G7 J5 e6 ]" j s.ReadString();& ^. {$ w3 M1 }6 c5 Z% }
while(t.Rs()+1)1 b4 `9 w" l' w! H
{% C g7 d+ b: g' Q/ j& N, m4 E( w
i=s.Match(i,t);$ w7 j/ {, p7 w( U* H
if(!i)8 ]2 E( D; K; L) [. K \
{
9 J3 ?# K& d) n# x, |/ m! ~$ } out<<"No"<<endl;
; p& E- B7 G* | break;
. k. ^- L9 ]! ]' G/ p( { }& e. ?. J; U) O
}* l4 @0 x1 k# o2 F# B0 x6 r$ q
if(i)
8 k/ J- N6 b3 F8 C9 A' K; v9 ? out<<"Yes"<<endl;
4 Z, m5 u* q$ l4 k$ Z) y2 J& b7 ~ return 0;
* y, T4 s9 L C) y! m} |
zan
|