本帖最后由 厚积薄发 于 2010-5-6 18:40 编辑 2 Y+ i z2 q p6 }5 i
8 N% x- g& e8 ^! e, h
Sorting It All OutDescription
" w u4 m! B8 M% _: D
: j7 `( J, P. C7 {/ _8 V+ JAn 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. ! C) l, a! Q" N7 x: r; o
Input
1 y+ J0 j' _& }$ N# s1 E
& a6 U+ p& D* @" ?& H) }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.! `$ M( o0 P' C# _% {" U$ B K2 L
Output
! I2 S, X; E, `% Y( W
' p! b4 D: Z) q; \: w1 YFor each problem instance, output consists of one line. This line should be one of the following three:
( J, [' v: G& b; c( `1 v/ `
, p8 l5 q' Z O% _2 E, ]9 g. N; MSorted sequence determined after ** relations: yyy...y.
* {% o% F, V3 [Sorted sequence cannot be determined.
( ?9 S/ j5 b- t3 H* Y- l1 ~Inconsistency found after ** relations.
' ?- i' F+ y! W
- d p$ `7 E' x/ V5 Bwhere ** 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.
( ~5 S+ k6 C9 L% L* T. F( s6 V+ E4 z) M/ D% h
输入样例 3 [& R6 r) H5 z- K) B
4 6
& @/ a% X: o5 _- c8 a. |A<B# o# n3 N" M2 Z7 O/ G
A<C
. t3 m) c7 n. k, GB<C
0 ]- x; d6 W6 D- ?, nC<D
; i$ f9 ?2 H# Z! q) Q7 D4 hB<D8 Q% @* N2 B- |" H5 T+ o
A<B! q8 W2 P% R, ?& B
3 26 M2 n* j5 o: e. g/ v: S
A<B0 {) ?% x$ U, b$ ]2 a; o
B<A
6 Z" l u4 B: k' u' O26 1& L( d4 X0 H1 s; u7 X5 Z
A<Z
4 Z* t% {- w- \ ]2 a" e0 0
8 l U" O8 y ]& Q. Q
' U* p: ^8 T' ]$ _输出样例 + T" k, Z7 c5 H5 r/ d
Sorted sequence determined after 4 relations: ABCD.+ x$ K# [: a- q
Inconsistency found after 2 relations.
% Q, P. B' c- iSorted sequence cannot be determined. 6 l% _/ Z* }1 E, p0 |
Source
6 k* {" U9 W0 M! r
1 J4 x. f& g" BEast Central North America 2001 * N) q2 n* x0 X9 V
程序解题1: # N+ r$ S6 K/ s( e
//By Jackie Cheung* }; c' o7 f6 W5 a
#include <iostream>( I$ }4 m! I6 j: v. {
#include <string>
: p- u! j ]# C% t% l2 U/ O. p: V1 T#include <cassert>
+ o! A5 c" m) h s+ C2 Dtypedef struct tagNODE , }6 f4 n5 A3 P$ i
{
$ f8 p5 c( E6 a0 T9 R char val; u; z2 l0 W4 p' o) c3 f8 n/ G
struct tagNODE* link;! ^5 b9 }/ ]) v, C
}NODE;
' C0 B% x0 a, c+ {+ C; jusing namespace std;9 u8 u u9 j8 y; b0 f& C
void Marshall(bool** arrary,int n)
8 S( \* w q" v{
8 j3 M& p6 s& ~* t. W% S for(int i=0;i<n;i++)8 t( B. c# _7 [/ F, `% W2 D" y
{
1 f K$ X( Z' Z) L/ \ for (int j=0;j<n;j++)
, E/ S6 D7 Z' T$ E! ?: [$ W( I {
& B5 l6 [+ l& c0 y if(true==arrary[j])
9 b% Z: |( z. X8 p- @' \6 @5 w for (int k=0;k<n;k++)$ B* e6 e; S6 l8 H [
{
6 {, K: K z, w {: @" ?& F arrary[j][k]=arrary[j][k] || arrary[k];
$ s8 X" q q$ O( h! s9 Y+ w }
$ W1 @9 p- M( u* `* B0 |4 b }
: F4 |7 k& L" J V" n0 p }
1 C) y2 `' V# r7 f+ J};
8 s6 ~ a. Z! w/ u qbool SearchForRoute(bool** array,char Seq[],int nLeft,int nIndex,const int n)1 p, G, V& d- ]% K n
{: x$ f( X, `3 B) ^
Seq[n-nLeft]=static_cast<char>('a'+nIndex);
; X7 c1 a0 t: J5 \3 G% H: U! p bool bFlag=false;
, |7 R9 |: e _6 @4 H2 Z# t if(1==nLeft)! R4 z4 }. q0 V. {
{
$ v8 O8 |! k- e e8 Z Seq[n]='\0';
9 R8 Y1 g" i; k" G return true;( s( h1 I5 y0 M& i3 h+ f2 J7 a
}
" a' K [ ?" n# k4 g! O for (int i=0;i<n;i++)) {! y2 z7 s6 K
{
0 u( z3 D* y0 v if(true==array[nIndex])* U+ F! ^: I) a
{
1 w, \0 T o4 F# b$ R+ k9 j7 _& B " H3 ~* w7 Y1 K7 z
bFlag=SearchForRoute(array,Seq,nLeft-1,i,n);
- p$ G& L2 D0 A. E8 {: r }
! l; ?0 s, m: i if(true==bFlag)
+ |1 i$ D7 B0 F5 P8 S- @& F# G return true;
# u$ d9 c4 W1 k! b) E }: |- c+ H c3 I1 y2 O8 Z
return false;, g4 D- b) L# E$ T" A
};
& u# f/ t8 @! N% u- b3 h: Tint main()
/ W5 G6 I c9 m: ~9 e! y2 b( M7 V0 d. s{$ r" X3 E v) T K
int nSeqLen;7 O/ X w6 c" O$ h6 ^
int nRelNum;. c' ]: `# ~4 H6 \9 T
cout<<"Input the length of the sequence:"<<endl;
) T# e' Q8 C& r& y8 I6 b cin>>nSeqLen;/ g& P# M% N7 D1 E
cout<<"Input the number of relations between the elements:"<<endl;
# D+ i4 T0 K* g0 A' I: w7 W cin>>nRelNum;
K5 m$ Y7 |" N3 X* Y) @# O% m //1:if nRelNum<nSeqLen-1,then the relation can not be determined!
8 ]2 v p. _" v1 h2 } if(nRelNum<nSeqLen-1)0 w) v6 M% {0 j( n( m1 }% M6 j
{
0 g5 t% v& ?+ R% Y4 i cout<<"The relation can not be determined!"<<endl;
5 Y# t( {, v. m, S5 ?; g& K return 0;- F- F% { \* _* K. P8 D9 }9 \
}
: S+ g; o9 r$ a; K, }9 w string* strRelations=new string[nRelNum];
3 g9 J! O, n" t0 s7 P char* Seq=new char[nSeqLen+1];' K. v1 N- X% `+ U# J+ m: I
bool** array=new bool*[nSeqLen];
* D( i' B' l) B) T# c, g
' }7 V( o# [; t( R7 r' |- Y9 O for(int i=0;i<nRelNum;i++)
1 r1 |, M# }* k" h% g- ]% z* _ {* V" ?' }' j6 \; n
cout<<"Input the "<<i+1<<"th relation:"<<endl;5 E9 ] t# R- m6 ?* j5 _% r
cin>>strRelations;7 V Y$ k" x! d1 |7 h- F) D! {
}
. N$ W" g4 ?3 L6 |# M 9 g, p' R4 f$ P' a8 p f1 D
for (int i=0;i<nSeqLen;i++)
- m9 E. A1 X& U& i0 { {" V5 {2 m) g( F# n
array=new bool[nSeqLen];5 M* ]3 D1 x, u. j7 c- z
for (int j=0;j<nSeqLen;j++)
' l5 S! u: K+ J array[j]=false;
9 Z7 H/ P; Z; W" X; x }1 z' Q) I8 n0 x3 \$ ?
//The main loop
# t- u& s7 S, G8 G0 q- w for (int i=0;i<nRelNum;i++): C. e* k* U" _% p, a' ~
{! n) i: r% o# ~7 A5 B" c
char a=strRelations[0];
* w. R$ T2 |2 o* }5 J( y" I# V$ W char b=strRelations[2];
7 A1 A' ]4 P7 Y! l7 M assert(a>='a' && a<'a'+nSeqLen && b>='a' && b<'a'+nSeqLen);1 d( q/ f- ~" h8 z
array[a-'a'][b-'a']=true;
( P5 M; ~3 Z! t$ {: s# ]" h. C( {& n1 h/ P- o9 X5 n K. u. [7 A
Marshall(array,nSeqLen);
% t$ m* E- ]1 j' t# \6 T% z2 w: R" P# ^5 q: ]& `! G
//Check for Inconsistency after every relation
2 m/ f4 h g7 g- x) u) |/ u for (int m=0;m<nSeqLen;m++)
# _( c/ f4 B3 z& H5 Q, O {
0 Y; f8 K5 R" W; {$ ^ if(true==array[m][m])
8 ^) K# R3 U' f* ]2 [3 U {- o/ c/ [ _5 d% v# m
cout<<"Inconsistency found after"<<i+1<<"th relation!"<<endl;
5 l8 m7 w8 ~# Y8 K3 Q" @7 R0 A delete []strRelations;
3 y* _7 x& n; T+ J4 S for(int k=0;k<nSeqLen;k++)
% D- Z6 Y( S& B$ m( m( V# _$ v delete []array[k];7 [" A& h& g' i
delete []array;, V% e% f; R- l& c
delete []Seq;8 g- Q5 O. s( N2 r
return 0;
6 n& g+ w" E) D" ]) t n
& j7 }1 Q' o1 H* E. x }. D1 X7 w0 h4 G
}8 L% H. W5 s, D, V, Z
4 h! `7 ?6 C) W6 h* v. x" A8 p W //Check for the determined sequence after every relation 7 ]6 S2 ^2 V. v; e; C: O
for (int j=0;j<nSeqLen;j++)
; `3 D- u. h5 b2 c- h0 u {
4 e/ s/ Q: E" C% Y( s$ y if(true==SearchForRoute(array,Seq,nSeqLen,j,nSeqLen))$ d2 ]: p7 ^- h4 q
{3 g8 O: p) z) L) D4 Y# L6 y
cout<<"Sorted sequence determined after the"<<i+1<< "th relations:"<<Seq<<endl; H) h$ T6 {. w! S/ r: K" @# B
delete []strRelations;
$ K7 ?5 K' M' _3 [- o# D% c for(int m=0;m<nSeqLen;m++)
; X: K4 z. A; ~ O$ {, c! O delete []array[m];6 ^4 w4 h# M8 l' a) o. \7 B! ^
delete []array;+ p# k0 y$ s; m. |* }
delete []Seq;
( [+ c5 }3 M2 `& f$ H* D4 L return 0;
( s' u4 f/ U4 X/ P* U }
6 }7 p+ v" n0 Q0 i9 x+ p }" `) h9 t, k5 _7 B7 g
0 `' H% T! I8 _6 T: Q8 ]' q+ q [; p$ |# o# T
}$ b% y: S1 K6 N: l2 U
//If the program has come to here ,then the relationship hasn't been determined!!!
5 Z9 Q) }; g$ e) c8 S cout<<"The relation can not be determined!"<<endl;
- r$ X( U% a0 {0 x, i2 i delete []strRelations;" w# h% P5 w7 X) c
for(int m=0;m<nSeqLen;m++)
9 H! o( f) L! F5 Y. @6 O: f' ?: l delete []array[m];, q; e3 F+ d- E! C2 X
delete []array;
' e, y( b- S; o0 e; b delete []Seq;
7 C/ V& F0 e+ T3 s
; X1 o1 d0 c2 V5 N1 C2 m return 0;! ] z q7 p" D
}; B) W2 ]* l# N. Q, F) d8 a1 ^
5 A. S# x) [1 F9 s程序解题二:#include"stdio.h"
/ d: A/ z( ^6 \' mvoid main()1 X6 a7 L' o- v. c; r; ]
{
) g/ H: A$ v& ~" ?# {5 r( G int n_m[100][2];
. n, u; v S1 |% h' G q char re[1000][3],
+ R) X7 U6 x' e+ z& V$ O temp[26];7 K3 ~: S( V4 V% k- v0 E
int i=0,j=0;9 _- f& X2 a# k, [
scanf("%d%d",&n_m[0],&n_m[1]);+ }/ f" \- T( B( B2 s
for( ;j<n_m[1];j++)5 E! V" v) D* S+ w6 I& b( O) ?9 I
scanf("%s",&re[j]);
' P! k$ ^( m$ s. s. y while(n_m[0]!=0&&n_m[1]!=0)
4 Z4 O; j; G; S+ _8 w2 S {: I# R4 e, K' v/ c* ^0 z2 E2 t
i++; ]8 j, a u( A- a- U9 g* }( Z
scanf("%d%d",&n_m[0],&n_m[1]);" ^ W* S! f( o' s! D6 r6 @0 v1 s! V
for( int f=0;f<n_m[1];f++,j++)0 K V. i) o# Y& U
scanf("%s",&re[j]);3 e* h; e2 p4 h7 [6 u( O
}
! F( S$ ?" N0 s- w# ]* a8 G( N i=0;
p# \2 p0 ?2 {# f j=0;/ i, f P3 N1 F
for( ;n_m[0]!=0&&n_m[1]!=0;i++); K# z; I+ k, Z; g9 j4 i/ n) R/ [
{
# N" c( D# v# E# i2 F; ?% G4 G int a=0,b=0,l=1;
) U& z- w: {* W6 C# C for(a=j;a<j+n_m[1]-1;a++)
( e; i* ?- f# d0 ]2 ? for(b=a+1;b<j+n_m[1];b++)
[' I. i( c S {
7 n5 m ]5 Z, z9 Q8 G5 V L9 Z5 [$ T. r 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, N$ x! x$ Y
{' ~6 @4 O9 B2 u
l=0;
/ Z8 j0 M. O8 F' v' }: Y$ [, @ printf("Inconsistency found after %d relations.\n",n_m[1]);" h7 P: u# P5 A3 s: T" C8 r
break;! ^. [) x% a- @! \0 y$ b
}
' O4 z1 G3 O- Y9 j" d/ Q- f/ ^( F }: ~- I. N8 H& G7 y, G! w$ G
if(l==0)
[5 m& x# {' z) i$ A" ^0 o continue;//Inconsistency found after x relations.
9 C1 T( e' b( T* r8 k# S$ V2 u else{: K% q' a) ?0 r6 \' @. _% `" O* y. f
if(n_m[1]<n_m[0]-1)9 }/ | ]. z' H' x
{9 h& N9 s% @7 _7 v, I. Q/ Z
printf("Sorted sequence cannot be determined.\n");
- ~0 W; p6 Z/ k+ a" d: J l=0;
7 P: i& x" [7 R }
5 }* @, J# r! V- T$ x" R/ J/ f else
, u1 H! [5 r" M9 O5 t! a) @+ { {8 w0 k9 j s* T- ^' i6 w) M+ G; a
if(n_m[1]==n_m[0]-1)
' ^, \, t! o: @/ ]& \/ S! u { 0 Y8 d- G! ~' v8 r5 _% r& L
int k=0,p=0;
T$ R) `! Z8 k8 X. J for( ;k<n_m[1]-1;k++)/ b$ y8 K ^, H, b7 v
for(p=k+1;p<n_m[1];p++)' O" K$ W+ d& D. @# r4 }
if(re[0]==re[0]||re[2]==re[2])1 h5 \+ i+ C5 S
{% Q, S* V1 s! n4 {. c( q
printf("Sorted sequence cannot be determined.\n");
: u" \ m. X" k& \. U, x8 z8 P break;
" p/ @+ F- n$ E' u9 Z: c l=0;- z9 U0 l1 X7 k- K! U! U0 k$ _
}6 C# W( A' E0 T" M9 @; a7 M/ u7 K/ V
}" J! ~" T! E' Z
}- t A+ x& J7 u9 Q. {
if(l==0) $ j9 N4 g: I/ s' W J0 m- @
continue;//Sorted sequence cannot be determined., L; m q. o) r0 c. D+ A8 e
% r3 t# f+ ~* `& d7 ^" q else
: b! R9 T" u7 @ {
0 D3 D, z2 n% }; V# e+ |
+ A4 R, \! h! Q* F& @ for(int k=0;k<n_m[0];k++)8 p& `1 m) g, A
temp[k]=k+65;
4 @! i& L1 P$ l6 X/ |9 q, t1 C3 p' j for(k=0;k<n_m[1];k++,j++)
: H2 I- H* q1 a& H2 B+ W. N {. l: h: h; e$ W/ U2 n
int t1=0,t2=0;3 f V5 R8 e1 e; e0 b
for(int s=0;s<n_m[0];s++)
5 Z* C+ u- J! A, |1 z2 \) t {
! ]1 T) y1 h% X* I if(temp==re[0])( }3 l& m8 a2 E3 ~
t1=s;. P: S" \7 }$ ]6 @- [- Y
if(temp==re[2])
" @8 B; t" @$ p6 N3 m1 @5 c1 l6 Q: j t2=s;# z* |, Z# I8 p& \* P3 D! M% h$ E
}: q P3 l' ^0 q8 L$ x( V. m
if((t1>t2)&&re[1]=='<')
% X; H" E9 c" E( e$ B {
# e5 w6 c5 v7 e# q1 O; Q3 U5 U6 y% c2 _ char t3=temp[t1];
' g; h# y3 k4 Q& V& L+ m temp[t1]=temp[t2];
0 A( T, _3 ]1 t9 W4 l* i6 i, K* } temp[t2]=t3;. e* l+ ?. m4 Q5 h2 `) u
}
+ Q% r$ M; @8 V. \5 @ }; e- d" Y4 x2 D# X- i. b
int count=0;" i" ]+ u: m4 A; g
for(int s=0;s<n_m[0]-1;s++)
4 F; J! o' `2 S3 t for(int d=j-n_m[1];d<j;d++)1 d6 f$ j$ L! Z! U7 z2 J
if(re[d][0]==temp&&re[d][2]==temp[s+1])
" ?: U. e5 d, T a {
6 m6 N! G# q4 `, N count++;8 m5 c* t/ u3 \: u( W, ]
break;
0 I( F* L, R# R2 |, e# Q! a }2 ^# r1 H, T0 M6 R+ \6 `# O
if(count==n_m[0]-1)
9 \+ E0 [$ ]6 u {
$ n; B* A2 T+ [7 `; y* K* F, m0 g printf("Sorted sequence determined after %d relations:",n_m[1]);
* O8 P( F; ^! u for(int f=0;f<n_m[0];f++)
( o. W4 g. J8 _ E2 Y8 p printf("%c",temp[f]);
{" n0 _' _7 j3 `+ e4 g* w! ^$ w printf("\n");
6 R: w# n9 J, S- Z4 s6 s x }: s. t$ A7 I8 H9 ]
else" A7 k2 c% x2 O; e
printf("Sorted sequence cannot be determined.\n"); $ a7 B5 [$ n; D! b; ]+ k6 S& v
}* A, @- S% @+ l N4 X; M! s
}
7 [ A4 F/ t# @) d% e$ H4 S }
Q& \0 G ]% S; F; K/ c7 z}
$ A4 ]! U, w8 U2 a" t7 Q4 s; j! N' m! a
+ M9 c& Z9 q& `5 p) K/ c. V, t/ z1 q7 `% f
9 X7 x1 v2 z( V0 N w+ T( l* U+ `/ m- v) P: F% X" A4 b
6 K4 ^/ w, \* _. U% m6 B* a
: Q/ K; r* x4 j8 m6 _
. h0 b1 X2 b: |来源:编程爱好者acm题库 |