- 在线时间
- 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>) \% u) J$ w( T% k" I
< >[[/hide]</P>#include <iostream>
6 p e, s( U( v6 c0 P6 l6 y#include <fstream>, Q6 s, I8 U8 v) O+ m
using namespace std; ?* l( J. g/ n: k, X) Q3 z
ifstream in("input.txt");
! ^+ g# k# y& k2 y& N" ^$ F& Oofstream out("output.txt");
/ E- p% H- M- x1 i3 |& bclass String/ |( { V8 \1 e2 j& c
{- a: S! Z" C6 G* P
public:
. d/ U$ M2 A" U: b. g, v String(char *s="");0 a) l) g7 P, s% j! ?5 ~
String(const String& s);+ \" w8 x) ^4 Z& j L* x1 Q. `
~String();
2 r4 l7 |/ l" `( b3 h9 F" A int Length() const;: N C* g: w" V& `7 e# D
int ReadString();8 x) m& t4 m# u" n8 y" ]! U
int Rs();4 e2 b! b, s6 ?( b
void Prefix();4 I4 O6 X( }9 j9 h0 |9 u
void ModifiedPrefix();% \0 L8 l3 \: u3 }$ V3 Y. o& @
int Match(int i,String& t);
# s7 H) `6 Y0 H# v8 F private:0 ^7 h( T% S* t9 L6 N m3 W( B
char *str;
+ \9 t: H: V, V5 }8 t int *pre;5 S3 R& d6 X( D5 [) v: J- Q
int size;; E; O. i) ^* K
};# q3 A ?5 R5 s3 ~
String::String(char *s)1 `( j/ t$ h$ _6 B
{ J7 R/ d( P) S4 ^& e: D6 V
size=strlen(s)+1;
1 @0 M: C% i) o# p2 f$ F- t4 d str=new char[size];0 O' [: |$ g' i3 a- m, ^* F
if(str==0)6 H p1 j3 `& \/ z' v
throw "error";
* T! F& m z7 G strcpy(str,s);+ l9 S/ i/ c: m% D
pre=new int[size];7 h; a' r4 \! ^+ s7 p# _
if(pre==0)( D r! _; |. l- s4 h# i
throw "error";8 ~; d3 l$ j( X; H$ ^4 m6 }
}
$ G9 m+ u' f7 |String::String(const String& s)7 l: n8 [- n4 H( H L! b
{
2 e7 H# Y/ n1 Z; Y size=s.size;
; O4 p i- ^; T: G) \4 r9 Z5 M) E& s str=new char [size];
3 c ~3 M' B9 ^6 X h/ {5 G if(str==0)
5 |! ^7 ?, \4 q0 X! z$ ]4 L8 V throw "error";& ~/ [& P5 \/ u6 S- a
strcpy(str,s.str);
) D' q5 ^5 W4 [5 }" o pre=new int [size];) v- b, `5 }, a2 J' q4 [( c' m
if(pre==0)
& |5 ^# k' l; R: {! q( Z& b throw "error";
7 v! A2 f! `* b. ] k. x9 G! i}5 n1 d) z; e) e1 q* m
String::~String()
" Z5 W" u8 K9 a( Q _: {{
/ l! X. p1 T8 s delete [] str;' E( p7 m2 i7 G3 Y' A& Q
delete [] pre;
( N7 [) o+ Z* T' r8 j2 J) K- _}
p/ J( u6 K4 v( @ m7 z' p, w& G9 R( }( bint String: ength() const) o# m8 A9 p' R
{) N8 y9 x/ P! [ x$ Q" W
return size-1;
3 @( R# l4 I$ ?( M2 I+ Z8 _}2 U. {0 t% N/ M9 h) b( B
int String::ReadString()
) B: S) K0 H0 B9 h$ W{
9 R. T4 E/ |2 v- y* a/ J% y1 r char tmp[256];
2 q* K2 f- E) j6 \+ D/ O8 G* N/ o7 z if(in>>tmp)
4 a: W% B4 f% w Z7 M" v {4 Z- n% s; n3 w* V* q
delete [] str;, I, f+ L- I+ r5 C$ O5 e
size=strlen(tmp)+1;
* @$ F/ D5 @! r. v6 j0 ]: ?( f str=new char [size];" V. ?" A8 d4 h
strcpy(str,tmp);/ H( _& i* ^) m* ?1 F) ~
return size-1;
7 @ k# G7 d8 R, W }3 W& h) i( B, o
else. k3 @ |& i1 R* V% f
return -1;
0 x% C! _7 f2 i" b5 l2 r5 P}9 X0 y- V4 k/ q& V# u% y
int String::Rs()
) D+ h1 {9 W: n{( j' f* ^6 D; Y+ I5 ]0 Q2 p0 e
char tmp[256],c;
1 s; Y0 z& m# D; M6 N int i=0;
; P$ T, h8 E/ O! P& U5 F- A while(in>>c)& {/ O6 ~+ h$ k2 K
{
5 i7 }& I& j2 n" N' q$ Y6 `4 J if(c!='*')
8 P7 D* Z8 |( _' C5 N) F tmp[i++]=c;
# O; @4 c5 i2 h else if(c=='*'&&i>0)
6 f6 Z5 B% j6 ^" l) r; ^- n2 ] break;1 \2 L# a, K; F7 k# c4 x0 o4 b. ]8 e
}
! j9 Q/ {4 v4 V if(i>0)
; ?( R! _$ s# k* c {
# p) A5 Y+ B' J/ U& G, Y delete [] str;
9 Y3 n/ n$ W" @ v7 k- {' A size=i+1;
5 k) ^. W" d( d# s' N str=new char[size];
/ g% d$ j) [- x1 k7 T. T if(str==0)% d1 Z5 b% U: t+ U; N) a
throw "error";: p" P0 K& v* X' b' q+ H
for(i=0;i<size-1;i++)1 @ B5 S8 @/ s+ {3 `9 c# x
str=tmp;
, p* k/ O/ F& u7 j return size-1;7 @! d2 n! g/ Z! K$ u; A% S/ o
}
! T- b$ Z1 s S7 O else' Y$ ^1 m% A/ O: d* x: w
return -1;0 D8 a4 }9 g% @
}8 C1 J9 T8 E, n4 m3 y9 e
void String: refix()
! [. x# }1 a. f2 a{
( f3 Q( _ @- H9 U* \ int m=Length();
; X' {8 O/ ^' A9 {7 \; L delete [] pre;4 c0 E: x- S; B* ^, s2 k, M* x5 O) ]
pre=new int [m+1];
% u) V; b, x6 e. d# f( ] pre[1]=0;0 D3 q# W( G- F* M
int k=0;" {1 m) ^4 `: j& {- o9 f: U7 b
for(int i=2;i<=m;i++)
1 y1 Q+ }% H& f1 w& e {
; U% q* I! p4 ~% l while((*(str+i-1)!=*(str+k))&&(k>0)): o& V/ @* s" n' |
k=pre[k];# h7 e2 T. }4 t
if(*(str+i-1)==*(str+k))
- ]+ X" P5 T: J. v y( Y pre=++k;, \2 P, i# f( p# Y/ I/ x, Z
else
( b9 i) E- ^2 V; h2 r4 b pre=0;
1 x$ \$ o$ Z, ^ _. D p% g. Z }
) O( r+ _# d$ e9 r8 D8 g8 N}
! B: j2 n; L; c6 mvoid String::ModifiedPrefix()1 g) N7 J' }' N2 w/ l
{7 @/ e4 H( L1 o3 S5 ^
int *f;
, M B' E3 F' h& V3 L int m=Length();: X! S. j( ?8 B& J% g7 N
f=new int[m+1];
5 a/ R1 B2 O! N6 { Prefix();6 P* M$ N1 X' j
for(int i=1;i<=m;i++)0 c* i/ v" U& L0 Q
{: [5 S" j3 \- g+ `( G( ~+ i( ?
f=pre;
! w3 N- |# I* \; U* ^ }
, E" e; Z; M8 g. e for(i=1;i<m;i++)1 Q9 F- T4 B3 e9 B
{5 X5 t/ d& h& m& F0 D1 ]6 {
int k=f;
& E1 X( P8 L4 T* ^1 E if((k==0)||(*(str+i)!=*(str+k)))! w$ ~9 l/ |1 d3 I* N
pre=k;, h4 @" ^( K2 J: O! H
else # m" `" V$ ^: g! g/ Q: w+ ?
pre=pre[k];
. r- D0 e& `2 X3 L, v6 b }
7 r9 u. z9 K. [/ h2 @" f* W( g9 w delete []f;
* Q7 N, q/ m6 V! w: J}4 j, u6 Y4 d- q* K4 V3 g
int String::Match(int i,String& t)
% }: j6 Q. q5 S{
& s8 d' C( P, M2 U int j=0;! I2 B4 E) G" ?4 ]
int n=Length(),m=t.Length();
8 q0 j! r' \0 N0 \4 Y } t.ModifiedPrefix();, N+ g5 S* t7 f: F+ d- p3 F
while((i<=n)&&(j<m))
: k. W' G* Q' b, X+ g, x if(str[i-1]==t.str[j])+ I, h C3 {* `$ V( P
{4 X8 C& [: J( t9 d g3 W* Q
i++;
- G$ T- J$ }. L$ A3 O j++;
- N3 ^: [7 S2 z) s9 R% K' s5 M }
0 P5 z$ g( _- W* P% W else + n/ _# j; y. c+ D" `" O' |
if(j==0)
) [# j5 F0 ^& Q i++;- ^1 e4 F+ u g) I3 q! [$ ], M
else , m1 S1 o1 c' i1 O) b
j=t.pre[j];( [8 v7 `( P% [3 N- J$ d
if(j<m)
1 ?9 G( Z/ ] G. V% z' a+ J, m: O return 0;
% [* e7 U! E9 o. ~7 ? else 5 F. C/ R% Q: S, k0 g
return i-1;0 { D- q' s# H& Z3 f! d
}
& V4 u+ Q7 Y3 {7 v) }int main()
- j2 Y$ g( H6 g# ]6 O7 z; _{
& P- h% I$ n& q) ~8 I) e7 C* u; y if(in.fail())1 _7 X5 _8 j* Y j( N
{6 S7 Q6 S! U% b. _7 P. e* H
cout<<"the input.txt is not exist!";$ g c i: B5 h1 O, [. l" }
exit(1);}
9 u; d1 @- ?' Z9 a int i=1;/ E0 E& K# [, V/ w8 J/ J
String s,t;, e2 K4 b( i9 }
s.ReadString();
( T1 b. `& R8 |; }: T/ ^1 r5 `5 X while(t.Rs()+1)+ r9 E1 q: |1 {. ]
{
5 U O5 Y. e% C- H i=s.Match(i,t);5 n ]1 S, i' K g2 X/ j6 [
if(!i)
" h/ {9 G1 \/ x4 X& `4 X8 g+ R- M& m# B6 x {% p1 N8 i# K2 P# A0 Z
out<<"No"<<endl;& h1 N+ `- j6 @" }4 d/ P% {
break;7 p; F1 S2 r: o) s4 g. _
}
/ A' c8 [; c. { }
; p* Y& h! S* g+ O if(i)* \% z/ B' k# w# g) @5 ?
out<<"Yes"<<endl;
' p' I7 Q2 g# @; Z" o$ X! ? return 0;$ V6 v: c+ n& V
} |
zan
|