本帖最后由 厚积薄发 于 2010-5-6 18:40 编辑 6 l% N8 m# ?# B# F
' h! X N7 H6 S) S( A
Sorting It All OutDescription
7 P. Y( Z/ Z: O) N: g/ r) Q, @7 u! Y. x# x5 u" G
An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from smallest to largest. For example, the sorted sequence A, B, C, D implies that A < B, B < C and C < D. in this problem, we will give you a set of relations of the form A < B and ask you to determine whether a sorted order has been specified or not.
8 R- i, U D; wInput' D, t9 N* C* b) W) F8 f
2 x3 R: ~# t0 v$ m, O; T
Input consists of multiple problem instances. Each instance starts with a line containing two positive integers n and m. the first value indicated the number of objects to sort, where 2 <= n <= 26. The objects to be sorted will be the first n characters of the uppercase alphabet. The second value m indicates the number of relations of the form A < B which will be given in this problem instance. Next will be m lines, each containing one such relation consisting of three characters: an uppercase letter, the character "<" and a second uppercase letter. No letter will be outside the range of the first n letters of the alphabet. Values of n = m = 0 indicate end of input.1 d& Q; _) o7 c0 N2 Z
Output( o: o- R: x6 u7 G1 L) s# P
6 F1 w/ W) G" x! j; r% O) E. f) u7 G
For each problem instance, output consists of one line. This line should be one of the following three: , k' p4 o2 z& i) W
0 M7 W8 h" M/ n) ~/ e- s, m& {- C
Sorted sequence determined after ** relations: yyy...y.
2 `/ L1 h" i6 o+ v) qSorted sequence cannot be determined.
4 V8 c* C2 A D: v* F' PInconsistency found after ** relations. 9 |) M3 A- O& h. M9 u& k
( N# o: x+ P* m# L2 K+ y& _2 y+ U
where ** is the number of relations processed at the time either a sorted sequence is determined or an inconsistency is found, whichever comes first, and yyy...y is the sorted, ascending sequence. % M3 D7 e) m' [$ ~- e
" I; y: _# c8 e5 d1 ]输入样例 3 W# @2 ?9 m4 i8 K0 ^ h5 A
4 6
9 s4 D5 k0 U6 f1 a0 fA<B1 _: h4 k4 n! Q% M
A<C# w2 J+ \* `7 a7 D5 _
B<C
+ b" _) D l7 Y0 a q! BC<D7 @0 d( t7 j8 {% F- s1 q) L
B<D: q5 o" G* w% |8 I5 j3 _& l
A<B8 ]5 V2 R- f b$ m# @) u; H+ J+ h
3 2
$ U0 y# B; `4 _ j3 eA<B
6 [! B$ V5 q8 o1 C5 Y. RB<A
3 ?3 b; L# l! M7 P, c1 I5 o( R7 ^26 1
% B: |6 H. u9 s; @! w/ O4 m yA<Z0 b' {; X" J, v7 Y6 R, N
0 0( v! T/ ~: s! o0 s1 g/ _9 D
! I o: q1 l0 P/ B7 S输出样例
1 c0 H2 }) w, t- WSorted sequence determined after 4 relations: ABCD.5 p& o0 Q4 s+ a Z) B; l
Inconsistency found after 2 relations.3 {" A( B6 H$ l3 f
Sorted sequence cannot be determined.
8 ~" [+ g4 V' K) L( R8 U! X5 aSource
+ I) r4 U6 }; M
G; T) t/ G/ O) qEast Central North America 2001 ; R# Y/ M3 `# a/ {* ]0 {) i
程序解题1:
- {1 f; U- J( k# l+ i1 p//By Jackie Cheung2 l0 V- k- ~4 d
#include <iostream>
3 p$ H# D, M3 E#include <string>1 n3 P4 u( m: P( s2 C- d8 E, Z8 `2 `
#include <cassert>
' Q; [' O4 d& ~7 f: w; `2 Itypedef struct tagNODE " P# {! D9 N0 q* b" o: z
{9 v# {7 G* p9 G
char val;; D+ ?2 ]9 _. q3 ^! e2 K
struct tagNODE* link;
3 V3 ]- J! M9 `8 ], S O}NODE;0 e- v, n# s0 f! H) y
using namespace std;; [/ n7 A) u& I
void Marshall(bool** arrary,int n)
6 Z2 ]4 p- x4 c- [) ~{
2 E% k4 ]; ?6 m" O for(int i=0;i<n;i++)
* B, s7 ^/ L( J- A5 S' u {; { e$ X/ V8 o) D O2 C
for (int j=0;j<n;j++)
' \" }, m- X+ t! ^3 o' i3 l {4 t6 j5 S& W6 d# s( _8 {* |7 C3 {0 k
if(true==arrary[j])' V! Z* P' r% ^8 N* U+ g
for (int k=0;k<n;k++)# }6 g! j) h" L* O/ d9 ]' h
{3 Q7 L" b- H( v: k
arrary[j][k]=arrary[j][k] || arrary[k];
~. \& h6 a, s* O% H( E# y }4 l3 G6 [3 h9 Q7 M# i8 L, M9 D
}
/ `/ I9 @! n: e1 d* Q }0 o* {9 s7 K. [
};
8 ?" p3 v. l, }/ M6 Q Hbool SearchForRoute(bool** array,char Seq[],int nLeft,int nIndex,const int n)
7 p4 R6 c% ?9 A# L% b/ T* @{
8 Y" h+ x! X% d1 s; @# [ Seq[n-nLeft]=static_cast<char>('a'+nIndex);2 I' ^: ^, h6 }5 V" j
bool bFlag=false;: n3 }# _' ]1 t: g0 d
if(1==nLeft)* y# q6 k4 [4 W7 c1 W! J5 P2 C, e
{
+ j$ G+ A" d! g Seq[n]='\0';% H& s& J/ @/ E1 v
return true;
; W9 a9 W5 _: n& l d }
5 I5 A3 B* b* M m( |0 a for (int i=0;i<n;i++)
) u& E1 U! Z. ~ {
- `9 q* L _( I; \0 Y if(true==array[nIndex])% `7 u/ q+ [, U$ t
{. Y" o+ d4 ?5 U. ]% l. t
1 S. ]( v7 ]7 X( T4 s$ k bFlag=SearchForRoute(array,Seq,nLeft-1,i,n);8 W u( J% ]6 y, r9 I# j [
}5 U9 R7 L, k0 }0 X- e
if(true==bFlag)& o) F8 V5 A) I4 @/ X( Q, N0 f+ R
return true;7 k, k& |# p' \# J" F- Y6 X W' }( g( ^
}, r4 T3 R( |' `: z _" O C* l
return false;
3 d( y3 d+ r, a- j" ?% Y};- x- e# a0 x# ~# ~5 \" U
int main()
& ~; R3 `/ C/ Q{
! \# E4 S/ `/ P' i6 q int nSeqLen;
8 E6 p; _! G0 n! Y- r% x0 W" y int nRelNum;
0 p3 p* {' V5 o$ i cout<<"Input the length of the sequence:"<<endl;
4 Q# Z2 w3 r; }$ M cin>>nSeqLen;: q, `) E: r2 E7 [
cout<<"Input the number of relations between the elements:"<<endl;
. e5 _1 I0 H8 y, c \0 A4 R* D cin>>nRelNum;
4 x. v; H& Q% i6 h //1:if nRelNum<nSeqLen-1,then the relation can not be determined!
- q- P2 }2 N( ~3 g if(nRelNum<nSeqLen-1)) `$ ~7 O9 J8 S) S+ m$ `6 A
{/ U R' J! ~+ H w. {7 @8 p
cout<<"The relation can not be determined!"<<endl;
1 J6 }, ?8 s. W$ x( K! p return 0;: ]- y- h, y! h6 k/ C9 K2 w
}
6 y& J; G; H0 k. n+ r: @ string* strRelations=new string[nRelNum];
. V2 J) Z3 A( v+ r. J& t4 v* @# } char* Seq=new char[nSeqLen+1];' O" |$ T2 X5 E3 w
bool** array=new bool*[nSeqLen];$ q; ]7 r3 f# ?' L, P" v+ h% [1 F
1 d- e3 ]$ p7 R3 }1 }5 u: x for(int i=0;i<nRelNum;i++)! z( Q8 @! T+ }9 p, Q/ z h
{
. y+ f0 }; x' o cout<<"Input the "<<i+1<<"th relation:"<<endl;
! }6 h# C! j5 a cin>>strRelations;8 s% Y" N _+ j
}5 {2 L# S V$ L2 e! `3 O+ y$ H
+ Y7 w' ?' O$ A1 X- j1 L
for (int i=0;i<nSeqLen;i++)& x2 j) D- l/ `
{" W3 }3 E% q4 E7 m/ R( V) j
array=new bool[nSeqLen];/ M) Q5 U5 T% q* t e
for (int j=0;j<nSeqLen;j++)2 {% v9 i9 _6 l3 {) ~* O
array[j]=false;9 ~9 i) w' j" U( ?7 q4 W! ~
} o) e& z) y& w+ M% |+ W) ~: t
//The main loop
; P# M+ q' x6 c1 f2 t* v8 { for (int i=0;i<nRelNum;i++)
! v) B8 |) V+ P; t9 l" ^; }; d" D {& D1 V2 f% m3 R6 y
char a=strRelations[0];# D& J% ?+ h+ U2 S: I+ k# P& |8 r1 _
char b=strRelations[2];' v" ^& U$ Y4 U Y1 L
assert(a>='a' && a<'a'+nSeqLen && b>='a' && b<'a'+nSeqLen);
+ s- U9 K2 A9 z/ w! K( P) z array[a-'a'][b-'a']=true;# x X& `7 O0 z/ W) O
' k9 [ l; q9 c8 ] Marshall(array,nSeqLen);, r5 Y: s+ e* b6 \8 d p u- |
c# K6 G w1 U //Check for Inconsistency after every relation2 i9 o+ B3 l: |9 [: z9 m
for (int m=0;m<nSeqLen;m++); d% f: |8 x B2 v9 f/ U) v- |
{! U ?- b* _- F/ d4 s0 O
if(true==array[m][m])
! ~0 t! _+ s+ E6 f {! o5 E7 ]+ ~* j; b: h+ W: i
cout<<"Inconsistency found after"<<i+1<<"th relation!"<<endl;2 R& {5 L# Z( `# g" m! T; U
delete []strRelations;
, Y% b$ K3 c8 v0 @9 A* L* e1 }! d for(int k=0;k<nSeqLen;k++)2 @( U8 \9 ~- D: ^+ \8 z5 k
delete []array[k];- B4 O9 F" u) V7 ~6 ^, D
delete []array;
2 }, b3 t: n, Q: E) v$ f delete []Seq;
3 N v z# f" M return 0;
j8 V+ v ^4 j: h; s
" t3 n; {( F( V! J2 f0 t }
/ c4 I u* b3 {! J9 P; |+ m }
! \% c8 v7 J) [+ Z5 F
1 S$ e5 r' K/ ]6 u0 c7 e- U //Check for the determined sequence after every relation
6 x% g) ]) k7 U9 g0 n+ G8 T, ` for (int j=0;j<nSeqLen;j++) A1 W- z$ E+ i% F% u3 k* D& S
{
N! W3 J% @9 \7 P if(true==SearchForRoute(array,Seq,nSeqLen,j,nSeqLen))
! e. \) ~" M4 _( R& M: s$ D {0 I. Y+ k1 H. n9 H( M% h5 w
cout<<"Sorted sequence determined after the"<<i+1<< "th relations:"<<Seq<<endl;
/ p4 t, Y9 f. k2 g- Z delete []strRelations;
8 {. L. u+ s8 C9 z& o for(int m=0;m<nSeqLen;m++)
5 B8 H6 d% x) C# s3 S5 V; i delete []array[m];+ H: K% e9 A3 v8 m" @3 I
delete []array;
6 n! y+ B' d9 s9 E8 P delete []Seq;
9 k( F$ N" H% d/ N return 0;
5 [' y5 [( B' w- |) t+ M }# ]+ b+ X7 A( J" U
}2 ]9 U& L$ h$ Z. ^, E9 h. f
3 a3 E2 Y7 R8 T) d# O
) g8 i2 b5 A5 y% V" R7 N& A
}, f5 L7 Q K5 O$ q* h
//If the program has come to here ,then the relationship hasn't been determined!!!9 K5 k' C4 X2 v1 ?; n
cout<<"The relation can not be determined!"<<endl;% o1 e, M9 {! N5 J) ?
delete []strRelations;& ] `, @: h9 d, \; h9 l
for(int m=0;m<nSeqLen;m++)
. A7 {* T1 `' H; ?. m0 j6 L8 ^ delete []array[m];# A4 t8 J: c' e# J& v$ Z
delete []array;
8 T4 Z8 w# P, Y7 p+ o: ` delete []Seq;
- c3 z2 z& n" L8 t4 z R . y3 N; N( i" P. {. N" H" e
return 0;
0 O. V; K* U9 f& p$ s0 \7 r3 C}
7 n5 B, }+ b, w; \- m+ X0 _( i4 F3 n5 D9 \
程序解题二:#include"stdio.h": C- B2 F4 F* s
void main()
& I/ y( m4 p/ ?7 ^2 m1 C% D' |{
/ S9 ]. R, _5 u! h+ P int n_m[100][2];
5 ~* @( f' H1 s1 k# c- p; ?. E char re[1000][3],: k g, Y0 z* E9 s7 H+ X- v
temp[26];* p) r" L9 d% X7 C0 ?
int i=0,j=0;
: v. S/ R; j) N scanf("%d%d",&n_m[0],&n_m[1]);
1 }7 a- a* U' m! [/ }: l for( ;j<n_m[1];j++)* Y8 k( w$ p# M* z0 `3 h; t
scanf("%s",&re[j]);
* S3 Y# ~2 ]$ E6 p, O' y while(n_m[0]!=0&&n_m[1]!=0)
+ B4 g: W* {/ P3 h0 J {5 V+ Y) v! _6 T- @+ Z x. a
i++;( l" q/ F' q* r2 i$ Y4 j, E
scanf("%d%d",&n_m[0],&n_m[1]);
" ^8 \# w2 m* x) z for( int f=0;f<n_m[1];f++,j++)
8 n" {! r# [ z6 d+ x* c: z scanf("%s",&re[j]);
1 L5 A/ Y N5 d }, m( D. B3 p7 [' u" J
i=0;' X/ K) J2 G4 m) p9 w
j=0;
. ^2 _5 ?: J* j) B for( ;n_m[0]!=0&&n_m[1]!=0;i++)) x* B( G; x# ?1 a
{5 Z( w8 N- @1 Y8 Y( B! [2 X
int a=0,b=0,l=1; X* L$ ^) P/ l0 j
for(a=j;a<j+n_m[1]-1;a++)
& L0 G2 N m$ n" i& ? for(b=a+1;b<j+n_m[1];b++)8 C7 O. m: V" P0 N. j, F
{4 E; G& G/ k$ C; W4 q
if(re[a][0]==re[0]&&re[a][2]==re[2]&&re[a][1]!=re[1]||re[a][0]==re[2]&&re[a][2]==re[0]&&re[a][1]==re[1])
( J; p2 E; F& y+ r {3 p3 `) e6 C z, B6 }
l=0;
& F. V x! r, [% h$ c1 g# g printf("Inconsistency found after %d relations.\n",n_m[1]);
Y/ Q s+ |7 l9 k) V: H' Q break;
+ Z) H) [! f/ b6 k8 u) m }$ `9 x8 `; T) e1 v
}
2 T- K) K! F/ S7 Q if(l==0)
/ d7 C: T0 R; ], ` continue;//Inconsistency found after x relations.
% ?" z9 ?7 K3 D0 _2 k, R+ L) k2 |: n" A else{& a3 q0 y# U3 L2 x: h
if(n_m[1]<n_m[0]-1)1 C% z) a2 _2 v4 Z
{5 A4 c( ~ C4 j* D% b
printf("Sorted sequence cannot be determined.\n");
]) ^9 t, B! b! ` l=0;
$ S/ `* Q+ h+ t- M }$ O5 H, R+ i( o& D4 U& X
else
- P }+ B/ S& B* k/ ]0 R {
4 I& u* c ^% I8 o0 ]/ { if(n_m[1]==n_m[0]-1)$ d5 \6 t) b) w2 V, m: n: ]2 s
{
) V$ e9 }( P+ y9 D- Y int k=0,p=0;
( i9 t1 f/ j9 s- Y for( ;k<n_m[1]-1;k++)0 A/ H/ x( s' o$ t* y+ @, j
for(p=k+1;p<n_m[1];p++)
9 G: U% o1 b. D+ a% \' w; \ if(re[0]==re[0]||re[2]==re[2])+ k( G |0 [# h' U
{0 |9 ~, q7 f6 G; Y
printf("Sorted sequence cannot be determined.\n");+ I# F: {0 p& o X6 E
break;
4 D4 d: \# U& d9 B6 A l=0;
, ]$ G/ J* [- J8 \9 E. R }
3 N: k* q1 G. n8 m6 g$ o o# Z- C }0 o4 `9 T' H& X _
}
' c8 w, B0 W4 G/ g8 O if(l==0) ; l! {' ^1 ~5 p3 o! }1 M0 W: K s
continue;//Sorted sequence cannot be determined.
2 |9 h8 \8 l6 D' h0 H2 p# V
6 P- E8 U: l0 z6 d! ^4 m% r) ^! ? else# N$ d' F6 i' S- I1 b
{! W5 ^$ w- `& u k# x( {- J! ]
: I: P/ z3 n0 C* x* c( I6 m for(int k=0;k<n_m[0];k++)
+ y3 G" A' x, P, n temp[k]=k+65;' P3 p( a6 x$ ]" W/ F! S a
for(k=0;k<n_m[1];k++,j++)
1 I% W5 m2 Q' a! z {, T9 W( x( V- h; n( l; o/ e; [' x
int t1=0,t2=0;' T/ E" e( y* e5 G1 B5 _ @9 ~) n
for(int s=0;s<n_m[0];s++)( ]5 g5 h: f. `2 W g8 q
{
6 ?% }3 u7 G$ @+ G x; z1 o if(temp==re[0]): c( V' }0 L! I# \! Y7 @
t1=s;
2 W. w0 Q* l+ _& ]# m3 E if(temp==re[2])) @. I# H+ T1 W
t2=s;. Z# p' I0 z5 K/ A
}
3 A5 _( _- L0 @ if((t1>t2)&&re[1]=='<')
: }7 Z6 ?1 ^8 \7 i {
; ?- s z* C! P* ` W5 x char t3=temp[t1];- k, n% M) R Y4 I7 K/ g
temp[t1]=temp[t2];0 Z) t! W' K" V2 g
temp[t2]=t3;+ f0 t$ [0 Y4 {/ ~$ _6 p: R
}! b- L0 M% ^: Z
}* l! h! T+ ^! o, t
int count=0;4 T; a0 W# j }9 @+ M# a
for(int s=0;s<n_m[0]-1;s++)$ o2 p9 B* D8 b2 i/ o
for(int d=j-n_m[1];d<j;d++)7 u- l3 j( s' w( B# `* L, M+ M) U
if(re[d][0]==temp&&re[d][2]==temp[s+1]) p2 U: O8 u4 s- R5 `" E( I
{
7 U2 k* i( F; i) O count++;+ M6 Z0 V B6 P; W B
break;
2 H# x! o1 r3 ?7 `' y; W# \ }& r$ n1 b4 V7 k' ~! J
if(count==n_m[0]-1)
5 l- m, S( `& ]- ]. l {
3 [# m( ^8 P* n) c" x printf("Sorted sequence determined after %d relations:",n_m[1]);
3 R* Q3 I. f' S% F# J for(int f=0;f<n_m[0];f++)
: r5 v6 j6 m s# o4 j8 f printf("%c",temp[f]);) _1 T0 w* s$ A# n: _9 ^
printf("\n");1 v% K0 f) i7 S/ l' K
}
+ W# u' b! I2 }" ?( R3 W: s else
0 L; P8 B' D3 [. N9 j- {1 u printf("Sorted sequence cannot be determined.\n"); % l' I4 g: @5 x! q, P# }& b1 U" W
}
. c" | o3 O- Q5 Q/ T4 O }
$ ]$ K6 n Y: |/ Y5 F5 s6 u8 _$ c }
" r; R9 |, z6 U, P4 x+ L) z* ^}
& N! W; ?9 @! u% A" d
6 h6 |9 g' `( V$ E: F
, y7 ^& E& Z; e! ^9 [; m: W3 Y& r7 l* \ n% e! G) H( {$ S" \
% b0 K( a5 Y% r4 r9 B0 j; R& J& b
0 i. I6 c a! m
% w, _1 A! X" n7 j1 V' j( m7 W( W0 Y& V2 ]
! H3 |$ E/ t8 Z% R! x来源:编程爱好者acm题库 |