本帖最后由 厚积薄发 于 2010-5-6 18:40 编辑 % X+ u( r# j G/ F8 x. }
' l6 _* @4 I8 |/ d, lSorting It All OutDescription
- E3 r1 ~. J4 z0 \+ ^6 S! N% E; B) r! T! L. F% L1 a: z! {& Z
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.
/ t. X# A" \' A0 wInput
$ j- i" v0 q- O6 ]; d+ \- }! r$ L5 W/ _8 B& _: j; Z
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.5 B" Q0 ]+ N" S. F o
Output, e5 L: O0 P/ U2 A$ W: Q
/ g) ]. H; Y. yFor each problem instance, output consists of one line. This line should be one of the following three:
/ e" f) }) g( } p5 q. K* r+ z2 f4 l# R/ I ]
Sorted sequence determined after ** relations: yyy...y.
9 @: ]7 N- d1 ~- i5 L! }" |( |3 }Sorted sequence cannot be determined. 9 T" Z# Z3 ^# r( ^0 `! ?% A
Inconsistency found after ** relations.
5 Y+ `/ l( @4 w
. ?* Y/ `! j6 g+ swhere ** 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. " |4 c, X4 q& V' i7 C4 j, u8 a- ?/ E- |
8 o( L- O" m6 |3 K9 T7 q输入样例 8 ~4 f2 v! o# N
4 6
3 h% L6 Q z5 ]9 g- uA<B
' R3 e! Y3 J1 K3 MA<C
, ^) j, D$ O3 Y/ N# bB<C( y5 e4 s! |* P# Z' ~" o4 l7 t
C<D! s* P: A1 m4 V& @4 m
B<D o% h) u; U" R: w7 K3 S. W
A<B \& _0 ^9 l$ z6 q" r
3 2
4 S" Z0 k3 E) ]( {' qA<B" u/ k; D5 V8 T, X9 ~( k
B<A) D2 t' q& ?$ i9 g) k
26 1
}4 |/ |* u$ t' F! TA<Z
" i/ F$ `- K5 C/ ?0 0' B* |! K" L( n7 ^8 |
* e6 Q" M; w9 _3 U9 {2 T
输出样例 $ u8 A, g- x8 M" c& |6 P
Sorted sequence determined after 4 relations: ABCD.
/ ?8 h1 u- s$ q! g: JInconsistency found after 2 relations.
& z1 C4 d4 ^" e4 I' gSorted sequence cannot be determined. : K. H' B1 _/ G, e+ Z
Source8 O) k# t8 s' l% c4 T0 j! c
( N& } x9 @+ s8 W2 [East Central North America 2001 . e! t: b4 l9 P0 V# \# w; a6 B
程序解题1: % U8 U& ^3 P# A U0 `& \
//By Jackie Cheung+ ~! I) Q/ z, E# t- ^
#include <iostream>; ]; A8 D, x$ L. l, O0 s, {; h
#include <string>6 Y( A: b+ c% F
#include <cassert>
- E0 e) y7 H: C1 S0 W0 j! utypedef struct tagNODE % z8 Y" ~# j/ f1 @5 H
{
+ l( _* d C9 ~. ~5 M0 l6 Z( ] char val;
+ X. v: [; E* N4 A struct tagNODE* link;
2 \( Z2 F3 I7 c) h; Z# l6 `2 d}NODE;
( O5 ~' b5 P0 V F" M0 g. z' Y' nusing namespace std;& ^7 g$ v" v; r/ N, r8 H* R" O
void Marshall(bool** arrary,int n)
& ^0 k1 g/ v; s# H8 ?{
% d) G' w, `: | for(int i=0;i<n;i++)
; t2 { E& D6 ?) g+ f {
9 h: ^8 V, ?8 J. A for (int j=0;j<n;j++)
5 u2 s. I4 c5 t- }, E; G {1 r) k, \+ l2 r2 m9 f
if(true==arrary[j])1 \. E$ G1 ]' u& Y! Q
for (int k=0;k<n;k++) h Y5 K- |$ B8 k$ |% v
{
# S1 [# b& h4 M9 D arrary[j][k]=arrary[j][k] || arrary[k];! I# ?! j! t; Z! d- B% ^, D* `
}& S" @- a. ?" c
}
$ w6 W7 Q1 o* l# |, [4 q }) f" K3 {- q/ k
};
8 _) O) c1 n3 M" t. Rbool SearchForRoute(bool** array,char Seq[],int nLeft,int nIndex,const int n), h' O5 E5 q% x3 ~/ @( A5 |1 X6 M
{
+ Q8 j) B$ d+ j3 V Seq[n-nLeft]=static_cast<char>('a'+nIndex);- h9 M8 H' ?( h) w6 o s, i4 [) l3 O
bool bFlag=false;
/ m3 F. q( Q' m2 d6 r* f+ h$ O4 X if(1==nLeft)6 E6 G S! Y$ o; o3 q7 F; Z
{# `8 k1 d9 ?+ P2 \( A2 P
Seq[n]='\0';
8 h; T' e( G( c* Y& O% \ return true;
1 `& ?' m6 g; x" C- C6 |7 ]1 D- k }
/ d2 X7 E7 t1 r' ~* E for (int i=0;i<n;i++)
+ U; |# b/ m. d. W {( F( r, Q0 F c5 A
if(true==array[nIndex])) T& J3 S0 B; `1 L7 b2 o
{8 m3 W, C- L- C* ?" h
) N3 h# {" b# {& {
bFlag=SearchForRoute(array,Seq,nLeft-1,i,n);+ {) A$ `& l1 M
}
: o4 O5 X+ u! X8 y! B if(true==bFlag)+ s4 ?* j( [7 ^2 T2 f, t, s B
return true;( C! L8 k: u$ d4 p2 |! J
}
1 Q/ V t) ^+ C! p$ Y# Y# J return false;0 Y, x) t& _4 V/ n. ?
};
+ ?, N9 q- u) C- c1 l/ T: Jint main()% W- O! V& t5 h+ C x0 O, {- z
{, t2 O5 @- q& L+ W2 m0 I
int nSeqLen;
5 o/ I# k! i O int nRelNum;5 r1 d: [- [5 v
cout<<"Input the length of the sequence:"<<endl;
7 E6 R+ P+ Z5 O) R cin>>nSeqLen;
+ t7 r/ q5 W. W cout<<"Input the number of relations between the elements:"<<endl;
/ y, S5 P) K2 A9 l4 B. G cin>>nRelNum;
& j8 s- |- m3 ]6 P( A$ i //1:if nRelNum<nSeqLen-1,then the relation can not be determined!/ m( @4 m$ C3 V9 l9 S$ j* q, A
if(nRelNum<nSeqLen-1)
! U4 u# s) X, U0 ~ {
/ f: T' w1 Y, V, u4 i) k( D cout<<"The relation can not be determined!"<<endl;6 w D. G4 U$ A; a
return 0;( J) w& J: U. \& S: r, m% T
}8 p2 ^3 O( }8 y1 h
string* strRelations=new string[nRelNum];
5 K& w; u% ?4 u8 Q; o" ~' [ char* Seq=new char[nSeqLen+1];1 }6 v9 @. K2 Y8 D, \4 a# N
bool** array=new bool*[nSeqLen];
. M" N( X3 X$ j/ d9 L1 e( U$ k P) s' P% J
for(int i=0;i<nRelNum;i++)
! t8 P$ W7 o! g8 G { p1 j" Y8 c+ y6 H
cout<<"Input the "<<i+1<<"th relation:"<<endl;
9 _$ [9 u4 E" \ cin>>strRelations;
$ G8 z8 {1 F+ G! K }
1 M) w* A# D/ m u/ o; h" p * H4 g3 L Z8 v/ k5 c y @+ K# h
for (int i=0;i<nSeqLen;i++)2 R( }; s$ t7 r$ ^' r$ _
{
4 [: k! a$ \ T$ C. s6 G, I* ?, W array=new bool[nSeqLen];
M, M" d8 {1 d: B& d1 `5 u for (int j=0;j<nSeqLen;j++)
# E9 B1 M- V9 g2 j1 z5 Q" q array[j]=false; U2 E6 o9 t2 k, K8 S$ E" S. |0 H
}
! ?6 ]! ]4 D1 j+ V& r! ]6 E, ] //The main loop
8 X! o ^; q, \9 }' a for (int i=0;i<nRelNum;i++)
9 J6 r$ [+ R9 ^4 ^ {+ e1 d! m; j/ x$ r, I7 h
char a=strRelations[0];* k$ E8 c' ~4 m5 u9 G- H
char b=strRelations[2];
3 O0 s. j, T) O# f assert(a>='a' && a<'a'+nSeqLen && b>='a' && b<'a'+nSeqLen);( D( o1 Y; X; i. x1 y7 o0 p
array[a-'a'][b-'a']=true;6 Y3 C, U; S( u" u# E
7 |- y! L( Y$ k
Marshall(array,nSeqLen);
4 S; W7 l4 R* P/ o4 C# A. }: a& B, m
* V! p5 i& }/ H( q+ {. E" ~, I. l8 } //Check for Inconsistency after every relation
- N$ Q% A$ K" @) o5 T* q for (int m=0;m<nSeqLen;m++) E6 k" x1 _, v7 e
{
# h/ [- L! |& [, B G3 d if(true==array[m][m])
) C1 V) t; U0 W- }9 t {
2 E8 z* \+ l3 f; S cout<<"Inconsistency found after"<<i+1<<"th relation!"<<endl;
* c' e+ o( K# y! |+ \6 y E) D delete []strRelations;
4 o/ a! h' B7 @3 @ for(int k=0;k<nSeqLen;k++)
4 n2 K1 @. n+ @* r7 {. E delete []array[k];
# W# o+ T5 B9 b7 l" N1 I delete []array; [$ Z! x4 F7 U4 z2 A2 U
delete []Seq;% p7 {. D) T9 i3 R; Q" I
return 0;- w8 T* y8 @) R V2 R$ ?
( a* r+ {0 J5 ~ V }
% V! ~9 h. ^: m3 t. m1 S. r }
+ s' C, b0 |1 e9 e
- L' a4 z0 P# ]5 z: L; [ //Check for the determined sequence after every relation
2 `+ F8 d. V5 [& l1 I/ [ for (int j=0;j<nSeqLen;j++)) L5 Y1 i. O- N y+ L
{/ D1 l. G/ Q# j2 X- m w( ~
if(true==SearchForRoute(array,Seq,nSeqLen,j,nSeqLen))3 j! p4 S( U; d6 B" }
{- ^. x' I+ T2 o& d n+ w4 s
cout<<"Sorted sequence determined after the"<<i+1<< "th relations:"<<Seq<<endl;5 ?; J$ h; G$ _2 e; Q
delete []strRelations;% F) M2 ~- q" i2 _; n- q- o% V
for(int m=0;m<nSeqLen;m++); n( h( E5 p' F6 B' v( I
delete []array[m];
o) R# Z' h- h1 M+ ~9 B delete []array;+ a; A( t. A9 \2 h/ w( T
delete []Seq;7 H3 T# r1 E7 P$ \- V0 @" K
return 0;4 z; a$ M% l! O/ _. D
}
& J8 w# A- b j }3 ] S) Y: P8 Z
- B, Q2 G% A3 _( U! m
8 p+ i/ j4 |4 B; m" T8 }0 z6 L
}$ `6 Y$ C$ `% b- T, |, F
//If the program has come to here ,then the relationship hasn't been determined!!!* t2 S: c! E, S. k) y
cout<<"The relation can not be determined!"<<endl;
8 U4 v @% F+ _! a+ g- K. O delete []strRelations;7 q; t) }$ p W
for(int m=0;m<nSeqLen;m++)
) G+ j7 K1 V4 i8 X/ E9 I delete []array[m];
# N1 u0 l& d1 ]7 _# K/ _ delete []array;" p5 U6 z: k$ x+ h0 t
delete []Seq;
9 o) V/ f4 w% ?! t$ ^3 W* e& | ) X h! F8 I2 ~1 R/ k6 E2 A% k: u
return 0;
) h/ ~& t8 J' @/ `; X- P}8 ^, C0 u$ M1 g& O! S0 p+ v1 Z
1 \* q) j* m0 D, W% G2 ^2 M6 p6 |程序解题二:#include"stdio.h"
- |' ?! I) e2 T9 Gvoid main()
& m( B0 i! H: l' e{. m$ S* h/ k8 h4 v d$ S
int n_m[100][2];: W) p8 f8 N2 x) {
char re[1000][3],
+ x! _, \- e9 T; f9 m temp[26];! M# `2 L0 C5 z8 o Y1 I
int i=0,j=0;
% |5 K1 G7 @; f# D, }. B scanf("%d%d",&n_m[0],&n_m[1]);0 v9 T. j0 R1 g/ D4 P8 z
for( ;j<n_m[1];j++)- p( A: h; K8 m k, M
scanf("%s",&re[j]);7 ^1 U8 s9 G5 {( g$ j& F
while(n_m[0]!=0&&n_m[1]!=0)
6 l% _- ^: s- ?( y4 h {8 ]$ M- R* B, Y: x; u0 C& y. G
i++;7 `1 h: @* E5 l, q. l3 s
scanf("%d%d",&n_m[0],&n_m[1]);- Z; H0 R0 x1 j
for( int f=0;f<n_m[1];f++,j++)
; i7 y, B( I/ Z& q scanf("%s",&re[j]);, a- o9 p* R3 o: n
}, b: g( v9 Q& n; N, E% l3 P
i=0;, U" I i, |' u0 w& P- a5 S
j=0;
9 V# M. V0 E9 g0 Q k for( ;n_m[0]!=0&&n_m[1]!=0;i++)
4 n' W2 C3 |# |# H+ { {: W9 L- ~. ]; `0 K! N5 `, T8 {
int a=0,b=0,l=1;
( ?' e5 w8 M3 B6 `7 c3 `/ F for(a=j;a<j+n_m[1]-1;a++)5 q4 v& [) |; ~: W7 Z s$ W
for(b=a+1;b<j+n_m[1];b++)
- X+ o! j6 ]. h! E {
8 Q! s* b. `9 a' m& _ 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])
/ @$ N; H+ |. t3 a( w4 H0 I {
5 j5 j# } D) |+ d! O' q3 B% G9 @ l=0;$ U2 G. r- G9 P1 J5 A' y0 Z) P
printf("Inconsistency found after %d relations.\n",n_m[1]);
& i _, H+ F8 P8 r break;
7 |( O" b" \! e }
9 D3 D( J" T% F* D2 h! S: W. o }+ v" y( h/ F$ W7 o( ]2 b
if(l==0) 6 g# W- j4 u0 v+ c% d: U, g: T& i$ O* M
continue;//Inconsistency found after x relations.; u$ G7 {9 o. Z% S2 P9 Z/ j/ s6 }; m
else{
+ j/ z l4 { V if(n_m[1]<n_m[0]-1)' s7 E' j7 V) b! \' ]8 W
{1 q- g! t5 s( a& q* ?; e5 ^9 ]' a
printf("Sorted sequence cannot be determined.\n");2 i: G$ r* H3 [/ |0 z
l=0;
6 b1 ]' X7 i: y7 Y: s/ j } P$ x2 P2 {; t
else2 U4 [& R. @5 _+ A; H* G; e
{
: n8 ~: W7 @ J" p" J) j" Z$ `% n if(n_m[1]==n_m[0]-1)+ J/ s9 A2 r, r, Z8 ? }5 R: B
{ $ d w# g2 o! P2 |+ C1 @ ]
int k=0,p=0;3 a% E2 I% s1 A3 V" t4 B& |
for( ;k<n_m[1]-1;k++)
# C+ G# C. U C' @, E for(p=k+1;p<n_m[1];p++), d9 K$ t6 R" w. o3 _8 R
if(re[0]==re[0]||re[2]==re[2])
: a% P9 t; g5 k1 x8 @ {
8 U& c2 @+ K) [ printf("Sorted sequence cannot be determined.\n");) F4 \* c p( Y' z5 ~
break;
. [6 L8 ?5 D/ l a* M l=0;5 L7 G- s( P# _9 G
}
) l0 k, r, J8 x" o9 l, ~/ B }
9 y# m x9 Q2 S- {' h2 {9 R k }
+ u/ H5 D* V+ X if(l==0)
- N+ y! L% ], o) f: f continue;//Sorted sequence cannot be determined.
# {- I5 s, C% d g9 v: y3 G D7 W/ X4 L, \
1 [$ o- o- o; R; b! R$ t3 Q else& L, j( T6 b' N# B' p. O
{, m6 b0 n& k" I0 \: O- ~- D& v/ }
8 a( ?$ D( W- Z0 M6 x for(int k=0;k<n_m[0];k++)4 C+ L% N" R0 R2 ?% G
temp[k]=k+65;
0 }! J$ E1 ~4 T( Z, X6 e: q for(k=0;k<n_m[1];k++,j++)! a: [( v2 f: K' c+ u6 C- c
{
4 d9 y6 @1 ^; \, V$ V; z int t1=0,t2=0;6 f( u# ^5 X' O) O2 f' n% q% N
for(int s=0;s<n_m[0];s++)
0 ^# O F+ J2 |( @- r$ G9 M l' z {
& z( p+ Q+ S- M3 b if(temp==re[0])
x v6 P& _* k! \ t1=s;
3 ]9 u1 ]. l: s- y9 z8 B if(temp==re[2])) p) n- z1 ]3 b2 k" U4 K
t2=s;
6 Y' r* @+ Y1 ~* h }. q" s; z+ j3 i5 h
if((t1>t2)&&re[1]=='<'), I! ^: I* u1 ^' T2 J( G/ z! E
{
, W! }' b5 h! Q. Q0 W char t3=temp[t1];8 W1 W. }$ U* q
temp[t1]=temp[t2]; C6 D; n9 q$ _9 g6 g* `
temp[t2]=t3;; B6 t) z$ `5 ?
}
' f7 P6 T1 Q8 g, r1 q3 p$ }0 D }# F" H; Z4 j! V I, C
int count=0;2 _: r( m" }* x0 g
for(int s=0;s<n_m[0]-1;s++)3 l7 j% P( A- C3 e! _, J: ~! o
for(int d=j-n_m[1];d<j;d++)
& \$ o* f, T% N1 o0 [; ~ if(re[d][0]==temp&&re[d][2]==temp[s+1])
9 B$ O9 f: |7 ~& q6 R$ ~, H {; M4 }( ]3 D: [/ {+ U
count++;
; y, n" C; P j8 q5 x break;9 b' G+ V$ ]( O& x
}
" f% U2 z/ V9 g; w4 n if(count==n_m[0]-1)0 |; T6 Z8 o. l
{
# Y& W+ G; z2 _* G printf("Sorted sequence determined after %d relations:",n_m[1]);
! |( F' h# H d8 F1 f for(int f=0;f<n_m[0];f++)
! a% C. y S3 v3 Y. J# e printf("%c",temp[f]);& i' r! S. ?& Z2 A8 F8 ]
printf("\n");
5 Y; O& O7 ^6 V+ i) u }
- D# ^# a" H, n# Q% s9 V5 u8 P else+ ?- g- ^$ f8 h& l# e2 B
printf("Sorted sequence cannot be determined.\n");
, J! C) b8 K- h S6 _ ~! Y$ _: V }
( m4 _1 T8 k' b* R# S }4 V5 a5 s# G9 p
}
0 s/ O& v. J j. e* N- ]}% V0 @1 J0 y. d3 X \
5 T7 ~! T6 o5 z4 K2 N3 O. T5 q5 s3 y T9 L B x" {
( H5 i2 u2 C* t4 w3 I
% s2 z$ T1 @9 e, y0 d, C
0 J# `3 ~2 F3 E2 q) c1 E1 W
. W% Z8 c) K) x" v" t, V8 E, h1 v( \, h5 e, {9 T* y: b# k
" E: i2 `% t5 s a! J. v( t+ |* ]
来源:编程爱好者acm题库 |