- 在线时间
- 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>" h8 `; q$ J* q' Z8 D# r
< >[[/hide]</P>#include <iostream>! }3 ?7 W# A; u# s
#include <fstream>& z% Z( E3 J1 u7 g5 P8 j# X! x
using namespace std;8 }& M3 T6 U% d9 |' f+ A
ifstream in("input.txt");
" ? }* Z6 T: ~, Cofstream out("output.txt");
5 Q& n& i# g' m; l; O- Mclass String/ N5 z' M" P d/ J6 T" S% D8 Y
{4 d h$ j( ^+ k/ m
public:1 r M# u3 Y1 T+ U, U3 U
String(char *s="");
; `3 U8 ]9 i$ k* o O# S7 ^2 z, I String(const String& s);* `5 d8 \* D+ k; G
~String();. X; Z w: h6 f8 o
int Length() const;* E1 _6 b D; ^; a' W% q
int ReadString();6 @# I& @9 M5 e
int Rs();
3 V; ^7 ~: A1 y, o void Prefix();7 r. k" N' E1 x# Y) n
void ModifiedPrefix();
6 }$ W. R% C8 k" K int Match(int i,String& t);
4 v9 ^ @3 |0 z7 G private:+ ^* w) F! A' J3 |
char *str;
" v0 S( ^- `7 @7 M0 I0 a int *pre;- k% Q/ |/ i+ \/ R4 T7 K. |, e
int size;/ _6 d9 q7 G" B" t
};/ c& {0 W8 f: U) p# S, s% A! h
String::String(char *s)
. a7 Y* V& Y! s: K{
6 N6 d, r0 O! ~: F0 I size=strlen(s)+1;
0 S# c1 e* e8 G% R" o1 l& S- l str=new char[size];
. _' W9 L9 H* z6 b9 g if(str==0)) |+ ]6 f7 T+ d
throw "error";1 z0 z W2 z& Q; Z' S
strcpy(str,s);
# P; c+ B. L$ G- C/ ~, T pre=new int[size];: e% c4 U: H% L% K0 {9 L4 `
if(pre==0)( L( x/ k/ R R5 F
throw "error";
, { ^. \/ O& p M+ B}
! |5 V& E6 E1 y. f- FString::String(const String& s)4 f2 o' H. ? L9 z4 g- y
{6 W2 M+ h4 b5 d. u6 [
size=s.size;
1 ^8 Q8 P/ I' g" F u$ N* C str=new char [size];9 l: j& j' [7 V- K
if(str==0)
9 n3 x7 i- P) w f2 H throw "error";5 U3 I) y ~ ~1 b* t4 F
strcpy(str,s.str);! @2 l. @3 R2 n
pre=new int [size];
( B4 l, f( S+ C: @# H if(pre==0) N4 c1 b Z! d" C2 _6 x; H2 o
throw "error";% a v4 x5 N3 Q G+ X' [" p
}7 @$ d5 _; W- O" @) z5 d8 g
String::~String()
: P. o4 H5 K B4 s# C6 ~{+ L* r {+ {! _
delete [] str;. I7 Q2 \% ~4 Z+ ^ x* ]
delete [] pre;
* z6 p* Z) a; a: E5 r5 J4 T}1 b/ `- L* @ T+ T9 y* Z% D! V
int String: ength() const
$ C$ u0 z% b; p5 p{: `; h7 Y% ~+ ?
return size-1;
! V' r: P& D( `& F V1 Y}
' g7 E: {9 p5 s9 I- S$ `$ H6 x2 iint String::ReadString()! z2 Y/ y X5 v+ b! t! f9 d
{; N1 n/ g. [- F, J
char tmp[256];8 | n( @% I" k1 ?/ w8 U5 g
if(in>>tmp)
4 Z/ V& N4 ]. j4 l& i {8 k; o4 F, c& Z$ B
delete [] str;/ v/ n2 b& ]6 B( _
size=strlen(tmp)+1;4 ^+ w! Q- q* |- Q! r! C
str=new char [size];! u- p2 C& T0 F3 p7 W
strcpy(str,tmp);
1 _( z: W0 v+ [- W3 A% x1 `. b return size-1;
+ {, V, H1 y" ~( y8 L, Z }
3 ?# N* I) F" V, M else6 t7 b, _; Z+ ~& N
return -1;
t l8 Q- \' K v7 g% c/ D! q}
; H2 c! ?, }5 `" }! Lint String::Rs()
# ~7 K# F' K8 Q! c{- E' V- X: J3 q. U6 v
char tmp[256],c;. Y1 @7 N) v: |7 N
int i=0;
9 x$ r( B# ~4 u# w, m x4 t/ K while(in>>c)
; e+ _* M; G [& O3 w {
; |4 D* F: V# {9 _; t if(c!='*')& c0 _1 `" e3 a" ]1 {6 j* A) l) ]
tmp[i++]=c;7 K1 g# v+ j$ L' T( j: D1 k
else if(c=='*'&&i>0)3 G/ f7 y9 F3 @" |9 n0 o$ U
break;4 d+ v5 A9 N8 F$ G
}
# p4 e- j% w: C2 p9 v if(i>0); e* U+ ?2 p0 O# U S. ?0 k
{
) @2 f7 K4 `$ u& t% ` delete [] str;0 e% e: N: x4 s n, m/ }
size=i+1;* I- K) G z( \! t
str=new char[size];5 s8 {# s0 b9 Z7 {( Q- `1 C
if(str==0)
3 J7 [3 \" ]' Z6 T, @2 h' r# C! ~ throw "error";6 u% x" j' ~; O& ]0 Q: w4 w# Z( ]
for(i=0;i<size-1;i++)
' |3 Q+ U9 s& f. |* ~# Z' L str=tmp; ; P7 C5 I7 K4 V9 l, V7 e
return size-1;
1 y# d3 I, P7 p8 d$ {* a }: b6 \8 P0 ?/ f
else" _* M" f- B! u, J% H
return -1;: W0 M# B. A3 L1 Q* P1 I1 |2 e
}
8 H# ~ u: _; L- D/ V6 T" Cvoid String: refix(); ]/ E6 M- I/ P* U1 j
{1 T3 e/ \3 K& b6 t1 ?+ [
int m=Length();
' [$ `, z8 T& h% _ delete [] pre;
( r' ]- {3 h; x8 t& ] pre=new int [m+1];
) m- e+ R" d6 b; @% m$ e, ~9 K pre[1]=0;
; _/ ~. G' b& R8 | int k=0;
& H3 K9 X) V: R: ]: q% U for(int i=2;i<=m;i++)8 D/ y9 E2 q% k7 _7 o0 p$ M* `
{. ~. M7 p3 C2 m4 s# M( N( t% U {
while((*(str+i-1)!=*(str+k))&&(k>0))
% s0 h/ P8 V; j6 b B" P k=pre[k];8 N! t9 _; L7 f" I( O
if(*(str+i-1)==*(str+k))
8 E# n* h7 C! P* y) u" J pre=++k;
+ V8 o1 R0 q' D" U; l3 G1 \1 {% G else
7 d, `7 D0 z$ t; @ pre=0;5 s S9 e( p5 }7 ]1 V
}7 L5 e! r6 S0 r% K) E
}
) z) w+ i/ i4 Xvoid String::ModifiedPrefix()
" G, m' D0 g: @% N1 u3 _7 n+ w3 r' I{
% X; _' ?( k6 f' l9 o5 |( p/ f3 A int *f;
; ` J* k( c# e3 W; M% C int m=Length();: w% x; t6 i! g8 \) x5 v- U, o
f=new int[m+1];5 ?1 m% D( v; T+ }9 W
Prefix();
8 j4 @' r8 k# x1 Q* s7 M% f+ @ for(int i=1;i<=m;i++)' S- E1 K* o- i# f8 W
{
. S4 i1 }8 P6 v2 T- r8 k f=pre;
0 N6 I9 H" ?+ \( f6 p: ?, \ }
4 [1 r/ ^0 F) D2 U for(i=1;i<m;i++)
; M( b: P/ g0 n2 P! c- m& Z {
8 l" \5 {% w; ?/ F0 q int k=f;
9 o$ W3 J2 W5 v* S; @$ L2 @ if((k==0)||(*(str+i)!=*(str+k)))1 p( ]1 k, D' e8 j( f3 t. n
pre=k;
+ v9 m8 n( m! I4 x3 b/ j9 T2 A# r else , X/ \$ k" o9 X8 B
pre=pre[k];
# `7 `2 }; R6 [' {* q2 T# H }
$ T# ]8 o5 G* A z2 |* \ delete []f;0 E. `7 j3 _. M: F2 h, ]0 J e
}. ^" A0 s Z7 j' \3 L: `
int String::Match(int i,String& t)
0 K' j+ J! i, c! \6 n6 `+ j{
: g, p7 Y$ f# w0 N& F: A int j=0;
4 }1 n) E& a' { int n=Length(),m=t.Length();4 _1 y3 X) A) K/ j9 X: j' e
t.ModifiedPrefix();
( I7 b1 x! a8 c/ u while((i<=n)&&(j<m))
3 L- z. g6 c' O/ ~! A; E- `* O if(str[i-1]==t.str[j])
' p9 B! s7 p2 p' X0 g. P3 w0 f w6 B {
! k+ l+ o6 } G9 s+ D2 u- Q i++;& v; t5 d$ m1 ]) r
j++;
) K# v: y- d9 g% O" S$ C3 _ }! l* h3 D; Z2 y7 |/ o5 Q( @
else , n% c' z# u+ L8 ]. ~+ b1 N
if(j==0)* l+ |& v9 s! x; L' A' A9 y( x! c0 r1 x
i++;6 ?3 q5 q! z" A/ I
else 8 a+ j6 L w0 l
j=t.pre[j];
t( O! x* c+ o" u! M if(j<m)/ }$ H# ^/ S( q* s z* F
return 0;; t! e1 G2 \/ Y
else * t; x' T7 R# x: h
return i-1;: J* O5 [7 B6 k3 F; e! X
}
1 H, |2 f9 u1 w6 c4 ?int main()/ c. G/ h. u# g7 q/ V' m. s
{3 C" u$ M- d; ] H9 y. C* ?: R
if(in.fail()): o. j5 \ K1 z( d' r, o
{+ c$ [, d. y2 R: A, `
cout<<"the input.txt is not exist!"; S H& V T1 ]3 `2 R) r
exit(1);}6 Q+ x- d1 h& t
int i=1;; c9 O/ m* N3 d# q
String s,t;
5 V x a$ g8 c4 a; V. p, y s.ReadString();
5 F0 p) J7 [+ X0 r6 B! G( p while(t.Rs()+1)8 e) e7 l# T& Q" X x7 v
{
" A9 ^' s# n# S) f' |% Z i=s.Match(i,t);6 H9 F( P7 Y6 C+ r# O/ W) K
if(!i)
J$ e4 m$ c4 }5 C, h- X& z {) K- S$ m3 q+ }, x; ^' R
out<<"No"<<endl;' W6 m; \' G$ ?0 j6 @9 T! M6 _
break;5 C, j+ |- y2 p6 O/ | r
}
) Z, @/ `: x$ F" T9 u. O }
( b" Y s+ R# ]0 T4 U4 @ if(i)
& R, K3 {5 L7 o1 t+ N6 p0 m% M+ ? out<<"Yes"<<endl;
$ [% H9 ~. C7 D& i" q- \- j return 0;8 E5 `2 o' v3 E! e
} |
zan
|