- 在线时间
- 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>
+ y, g2 l% v' R< >[[/hide]</P>#include <iostream>
! P/ b$ N3 m9 R% W, G" q$ b; m#include <fstream>
9 J5 D, z7 `3 A2 Q$ W" N) `using namespace std;
* Z0 S7 Z1 x8 hifstream in("input.txt");" {6 Z6 x. [$ b3 M
ofstream out("output.txt");
d, [. C0 @7 O! Z* [class String, L1 ]0 O- x: S4 S% j
{
! J6 k4 w3 R+ _" A public:8 n& R8 L, _$ w' L9 |' T, D
String(char *s="");
# m/ y; `, v" P7 e String(const String& s);
/ P; [; l; V, n& H8 B& R' k1 m; n ~String();3 b, `- [" I& P
int Length() const;
1 p: P% a" H2 I2 N$ s int ReadString();5 b! `1 A S# S0 k+ s
int Rs();% l2 S% e' N2 c# l) Z5 `0 C% k
void Prefix();$ q. n9 p+ ]; ]5 r9 v0 X9 X
void ModifiedPrefix();
T7 O9 h" K7 r& T int Match(int i,String& t);
: D+ i A4 F. W' A1 P1 P7 y% i private:# b& t: d: {0 T! C
char *str;/ E. X+ p! E% P9 y3 l( ~; u {
int *pre;7 `" c) { w+ B" C/ }% C
int size;
# G" W$ Z( L2 p; N4 V8 U1 r) w};
' o- V7 v* Z$ H4 l2 tString::String(char *s)
) n5 E3 d6 t4 ]{7 G# k. X0 c# h( L6 a8 P; n
size=strlen(s)+1;' v- K$ U8 [7 q- C$ Y
str=new char[size];+ t3 K# X* |8 d- T) V- Q
if(str==0)
8 [) `. N; O3 j% z throw "error";
+ T" R; d7 N5 ~# o4 K8 e2 D% R strcpy(str,s);8 }& K1 x- n9 [. Y
pre=new int[size];
/ v' M, {$ b: W if(pre==0)' C% V J4 W5 I5 h( b; {
throw "error";
$ n( g, G; y0 H, A% K9 r7 G8 }: z}
% z# c" A% D* F' VString::String(const String& s)
- O9 i6 j9 L- L+ u7 W% s$ l{) K4 @9 ~; j4 X9 e5 ~% v; a
size=s.size;1 b$ R: s8 ]- }
str=new char [size];3 p @ V) j" q
if(str==0)1 B T/ T% u& ~* V v4 ~; w
throw "error";
L2 D2 ?- J4 j# r! O' ?0 z strcpy(str,s.str);: c4 @ }0 J; O0 S
pre=new int [size];. j/ }% @3 P, l# ^, i3 [
if(pre==0)) l u# s% W/ P! V$ t! n! t
throw "error";
' u) a$ z5 S+ {) A! ?2 v v}
9 ?; c( C" l* t% }String::~String()
0 h6 y& \+ t5 j. ?1 e7 @/ Q# S{; S f9 Y% D/ Y4 m. p: O9 G7 j
delete [] str;
" `% X' F2 P9 l5 Z8 ~ delete [] pre;" ]+ j* U4 S: I4 k* R" L( S5 S
}
/ a9 O7 T$ p$ oint String: ength() const
! s5 `7 Y. ^+ r{
6 y# w2 I5 n# a0 c( D% f, @ return size-1;
0 b$ q' z5 J' f( O$ I u% \}
# y5 j: @+ Q+ I# _/ I6 H( Sint String::ReadString()
4 M/ g* [2 G5 h0 K3 R- \0 i{1 k: B I! y0 ~' S% v; ^& N# C" ^ D
char tmp[256];
( ^! y0 w- S6 U' \8 l. j- _! ~5 \ if(in>>tmp)1 }3 r3 h" a2 {' J
{
# M/ ~/ B1 ~0 _$ G" d% W% L delete [] str;3 q, i9 }3 x* q+ N9 W5 e' r3 j
size=strlen(tmp)+1;
0 {+ w- Q+ t* J) ~# q str=new char [size];
$ w+ {) s1 Z8 D. k strcpy(str,tmp);
1 T- n1 N1 B+ U return size-1;
4 A% ~; _0 ]7 N! t; w, H }
. t& ^ D& L/ y6 G$ ]+ D else
+ e7 F1 u+ m A8 u5 b7 d3 Y) i return -1;
- o# ?! Y! D# G" p}
' j/ o% u: B# s; Mint String::Rs()
: S; V2 w0 B* r/ n{
9 C& N' z+ B+ s; { char tmp[256],c;; j/ w, ? D+ K. ]
int i=0;
* \5 t& {# @5 E while(in>>c)
. s# A2 H+ b9 D {/ _! q- g& y1 C; ]( o
if(c!='*')4 m/ U- K( F* n" m; V. Y# ~( N
tmp[i++]=c;4 k+ {" X$ W& E+ A! W) y
else if(c=='*'&&i>0)/ p* Y, U4 R3 f8 l: |. ?
break;
5 e6 V4 X& o D6 L! w" `: m3 D }, R& k* |& q3 l6 K f
if(i>0)( _ p; V7 r. F' c/ {
{8 r8 | A+ Q: q0 F1 a6 v) N% t0 U
delete [] str; j% t5 V Q# \; C% @; d
size=i+1;
: H5 s* B# g$ Y+ k2 V str=new char[size];. @4 ^! G0 M, N: f7 i/ ~! ], v5 q
if(str==0)% f6 y1 o' c" X" G1 Z, y M. h' s
throw "error";; X' h, M7 L/ _* G+ x* e- o# f
for(i=0;i<size-1;i++)
+ ~6 g2 n4 K0 H str=tmp; , N- e1 Q0 ^2 ^9 X4 K7 @, ]
return size-1;& Q* x( H9 M# w
}6 N; N% @/ E6 t' }' w* t- n
else
. v* W1 M* T% H- w; | return -1;' m' E* h, w. F) j8 h6 u
}7 \# F7 m* o) O& O: h
void String: refix(), Z' ^/ w+ ?, g- F) d# v" f
{/ Q" W& _% Z0 V/ H, E( | h
int m=Length();
' o5 v0 Z" L% K5 G# } delete [] pre;9 J+ B% g$ W7 G Z' t) d- T4 K+ g7 S! x
pre=new int [m+1];& W6 I( R3 ?5 C {# d! O0 x) |
pre[1]=0;
# U7 x3 K. Z9 a6 j5 x int k=0;
8 K3 } _. c, n6 s1 P+ H for(int i=2;i<=m;i++)3 D5 ^- n9 E& `% X5 C
{
% H* {0 _% O( k$ ^% D while((*(str+i-1)!=*(str+k))&&(k>0))0 f) @' S7 l9 [$ b6 c
k=pre[k];
! C; m6 V4 Q" Z3 f if(*(str+i-1)==*(str+k))
% P, U0 V- C+ x, p* a pre=++k;- ]* Q! Z3 U; X( A9 S
else" r# |; @, q6 Z, _7 q
pre=0;% B. q7 a9 M7 a2 U' f, q
}
0 ?. Z' k4 Z# l& Y& J @& a}6 |: I! n# e; K5 \% D; u
void String::ModifiedPrefix()5 M7 o7 b) i7 f+ w- f, f2 e
{
* D# M" a0 a4 j6 { int *f;
. }3 e9 a# o- O; q) t: p int m=Length();# x2 g& Q8 P' d' z7 e) {
f=new int[m+1];$ y! \ ]' t) ~; ^1 P
Prefix();
% M3 [4 n$ s4 T+ A7 }, D. |8 ~ for(int i=1;i<=m;i++)
! T5 x3 h, T- A- ], H$ E {
$ p$ S y6 B5 S! f/ w* [4 ~ f=pre;
4 a" R5 f" c5 D* H8 ?, Z7 G }
9 y+ S& o! a7 G5 S1 X. R5 K7 O, O for(i=1;i<m;i++). N8 J2 Y) v* U. f' S, u
{0 B' t4 w e" m6 R$ U0 F
int k=f;
7 ]! ]! `( a, u5 a2 A2 o if((k==0)||(*(str+i)!=*(str+k)))% y9 L0 q1 ?. b2 b, u# R: J
pre=k;
+ g7 C% a* c+ O$ \0 j. H3 x else 6 w1 C; @0 \. I) B, p
pre=pre[k];' b7 z. I5 u' l j
}
" y; \( o$ V0 Z. H$ S! k delete []f;: e! B+ C3 x+ q6 n# ~
}
; `5 }& x& E* y4 P" P& rint String::Match(int i,String& t)6 U G& D. ?3 q: ^) j
{
6 X; B7 C* @0 f2 ?1 _; E R int j=0;
8 r+ Y( x2 h9 {1 N! p$ i( f" x int n=Length(),m=t.Length();
. l8 C+ i* q; H* m. {' [! ~ t.ModifiedPrefix();
, ^3 ?6 z) B( K while((i<=n)&&(j<m))" k% x3 r N) o1 F# K
if(str[i-1]==t.str[j])
* F) @0 g C+ n/ _7 Y {9 X) o# _' b, X) \# Q& q
i++;
7 S) `) S6 U. w% i \" X& u2 j' E j++;
4 n. u% e- s9 N& Y }
( Y& m6 r5 i9 V$ ?! c( w: L$ M% s& }8 d else ; K2 G# p0 W8 I
if(j==0)3 Q" ~+ J9 k# ^0 ^: M+ n2 D- L
i++;
- i" ^4 j% s( L2 r ?0 x) O else 1 K' s" V; D! B* D/ {3 n* [* H
j=t.pre[j];( `& g' V+ D8 F; j- V/ m, o
if(j<m)
$ t' X. v$ r1 M return 0;5 @+ x v, @! [# b7 a7 z2 c
else & R! c: `: J) w! x0 a) t% f" g7 t
return i-1;
( F: M& Q' d: N$ y}: U' [* w3 O6 O# {( e' j
int main()/ F, z# ~* V% s, f2 ^
{
8 g9 O0 A) i! i- h9 {; c# {( W0 B if(in.fail())
4 u$ b; i- ?% w- b {# a' c1 a, L& `& M2 P9 v5 M+ O* K0 A3 f
cout<<"the input.txt is not exist!";
9 U- n; h" {3 a exit(1);}8 |) a; e* j L/ O9 m
int i=1;
& b7 Q5 x8 i( | String s,t;
5 N5 g1 d) M9 R p6 c s.ReadString();' C, P1 u* u/ o" k4 o
while(t.Rs()+1)9 G% _1 P: _; t# a0 H
{, C, O0 j8 N6 q1 t; q
i=s.Match(i,t);- A6 s# C9 e8 j. H
if(!i)
! s2 k$ M3 |% K0 D+ {8 Y" p3 Z! E {
. T4 ?) E6 z7 j7 b7 L& g5 d out<<"No"<<endl;
! Q: w+ }2 _! |3 u9 T+ ^ break;
2 O. X5 z% |: ?3 } }/ x; V$ \. L6 W. C: ^* J8 F
}
9 I1 C; T% f3 C' P if(i)
' b. f! _# J2 r out<<"Yes"<<endl;* s9 l- B* _+ ]* _. a, @1 S
return 0;- A3 p8 D: P$ @" V5 c1 H
} |
zan
|