本帖最后由 厚积薄发 于 2010-5-6 18:40 编辑 : a! F" J& `3 }
- K2 t$ z. t( [/ k( O* y! ^+ K3 a; v
Sorting It All OutDescription
, W: C) y/ [4 D+ O3 F
, w3 i0 [3 N# @( A5 M8 ]0 ` \) n$ ]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. 9 k7 P- I ?+ }+ F: s7 I
Input
) X4 p* v( d' i( y6 g' U- Q; }; X5 s
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.( o' V5 ?- Y& X
Output& M Z m J) f7 @0 S
/ k4 @2 Q/ J4 N# `& K9 h0 e& g9 }1 p PFor each problem instance, output consists of one line. This line should be one of the following three: 8 h3 A! {2 v2 l6 l
1 e1 Q: A% C7 V5 w
Sorted sequence determined after ** relations: yyy...y. 3 m# y- P: L R1 ]8 j9 v
Sorted sequence cannot be determined. & K* p+ N8 R( m- W3 o+ P! s+ o! i
Inconsistency found after ** relations.
3 ?! M q+ B( D! f- e# G
4 c W) l+ ]6 V% ?) D+ j+ M1 \# awhere ** 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.
) i6 n8 J& }; s, [0 Q% y0 f4 T. Q% Q- k7 P% Z' H
输入样例 9 m" Y! F, |- m0 x+ o6 D* @0 B+ s! m
4 66 G# ?' b, G) S$ d: ~4 F
A<B
" b# q! B" c/ Y% @( G6 @3 {A<C
' _* {- i F5 L MB<C/ o z9 l# W7 v- E" e( f$ v
C<D, ?- x5 O- G+ R& a' }9 C5 P
B<D- b" Z0 N% s( O$ n9 c0 g
A<B6 a! r/ @) w% L' Z6 l
3 2
( i8 \" r7 w. ]1 Z6 E- AA<B
: ~! Z, U5 F( F8 L0 e2 }B<A
! T- z4 ?; b& g4 ?26 1: b/ L; q% N& X; J2 ?+ s
A<Z
0 M' }$ p7 x6 _8 \9 p0 0
1 j2 j f: v8 l0 W% L9 @ f- U6 q * \1 P+ M, ?% V. Q9 {/ b
输出样例
/ B: B% `3 d% k9 w6 fSorted sequence determined after 4 relations: ABCD.# ?7 V. ^1 l* y# u! M
Inconsistency found after 2 relations.- C n- T$ b o) `
Sorted sequence cannot be determined. + ^4 \9 t/ Y2 Y/ t
Source" r c. S4 u" D9 q9 U
5 m# C8 _% r8 h) P* ^- T" g& k
East Central North America 2001 # g+ Z* @% A7 T4 ~3 f
程序解题1: 3 Z7 T. W0 i& r* g$ y
//By Jackie Cheung- M/ l9 L* [# \" i' _
#include <iostream>
( ~0 A6 f" f( @; J- w F#include <string>% `3 C2 ^* p( `; s3 V9 X
#include <cassert>0 D0 K" v! _* [. x5 d x1 B
typedef struct tagNODE
# y! I* `8 {7 z5 d' c, b: w0 Y{9 z! p& |" [9 G% S( v8 ?, i) ]
char val;
0 b5 D7 l! t* _% [ struct tagNODE* link;+ X! O0 x) W, Q) ]3 s6 a( G! r% H
}NODE;1 K G W. Z& r' L. }0 U
using namespace std;- n J0 d/ j3 f V
void Marshall(bool** arrary,int n)3 _( p5 x2 S; V3 N
{
" O4 e# S( C9 G4 ~2 S: w0 f for(int i=0;i<n;i++)# Q" }! {% Z- R" j0 _: ^
{
: L. S$ p2 Y( `5 H6 ~! F$ ~ for (int j=0;j<n;j++)
0 p/ P) Z: B. [( [9 ?3 C/ C {
2 E0 i0 ~/ r+ M- Z* _ if(true==arrary[j])+ F7 j: K$ k2 v- b C. r' D* ]
for (int k=0;k<n;k++)$ O: L) C* j z2 f9 Y- H' s
{
% e" v' _( v% k# S0 M1 U: V arrary[j][k]=arrary[j][k] || arrary[k];
1 \( p1 p! m3 B }4 O8 n) C0 H# k
}7 S) q/ q* y/ e
}
6 v$ i# v8 U+ e/ z$ |& O5 J0 U};
& _5 Z& j$ g. Z! {bool SearchForRoute(bool** array,char Seq[],int nLeft,int nIndex,const int n)( d- {, z- N, E0 D
{2 ~1 P& G# K' J/ P) L/ P! G
Seq[n-nLeft]=static_cast<char>('a'+nIndex);" `- ]2 S+ L5 b, `
bool bFlag=false;$ U0 W" c+ Z7 U* j8 x& w
if(1==nLeft); G; G' O( C$ s
{9 q" }1 a. \7 ?9 ]6 t
Seq[n]='\0';
: ]/ B" ^- P) T return true;
5 y/ Z4 |$ k/ m- k }
7 i8 ^% V9 Z3 c0 R3 H. v1 P for (int i=0;i<n;i++)
# N8 ^# z) i* ^! d% ~ {$ r% m( J9 f3 b
if(true==array[nIndex])
+ r& `5 R8 r* g2 t( K {
) L3 R, z- ?& k2 B/ z% S! R( n
+ U4 n/ z/ K% g$ w+ s/ }9 {+ ~ bFlag=SearchForRoute(array,Seq,nLeft-1,i,n);5 o% M4 O9 {! j
}! r! _% @: J/ `9 j4 U: u1 T9 ~
if(true==bFlag)4 m! F$ z8 b: H& p/ u: |
return true;3 c+ K2 j/ u# y" B- G; f6 i
}
8 m8 \7 o- P3 g" R- Z0 G return false;
6 i5 X+ H0 Q9 o8 X! T};
; a5 ~1 N7 a& ]1 z, _int main()
2 L! _* d$ a0 ?, o/ j( k{
6 e, ?: h$ q& R! m8 C int nSeqLen; `$ j5 u: h1 k$ L6 ^
int nRelNum;* y$ m4 j* B9 }. M
cout<<"Input the length of the sequence:"<<endl;
2 U4 O3 D6 V& F* s2 e cin>>nSeqLen;
- |4 ^3 S; x G3 l cout<<"Input the number of relations between the elements:"<<endl;2 ~; @7 ]; T( F3 c$ d2 j
cin>>nRelNum;$ O% W J7 n( m& k6 Q% O7 k+ p( N
//1:if nRelNum<nSeqLen-1,then the relation can not be determined!
Q7 k! U9 g. l% I: {$ Y if(nRelNum<nSeqLen-1)* W! e8 I3 S$ _7 t. n/ w. t
{0 F& {$ X; ?( Y) i3 d
cout<<"The relation can not be determined!"<<endl;0 T; J/ j7 _7 h( J) Y% [6 G1 q8 \5 l
return 0;6 j# O8 n0 Z2 `
}
: n7 K- l ?, o0 ]% W" w string* strRelations=new string[nRelNum];
4 t" o2 ?4 M/ j+ v9 } char* Seq=new char[nSeqLen+1];1 |& q8 l* S4 |
bool** array=new bool*[nSeqLen];+ i6 J' K) Q! l9 ~; C
! o: h5 l% `2 T. h6 H! \5 L
for(int i=0;i<nRelNum;i++)
a" j+ ]# V" ?8 O& C$ E$ [- Z: Y {
% I- P o) R8 F8 h& @6 ~ cout<<"Input the "<<i+1<<"th relation:"<<endl;3 Y/ d9 }4 |; z
cin>>strRelations;
. u1 q/ n. [) B! U. g6 ^& Q* m5 f8 j2 c }
! k7 o" B# T, m; N/ W
- h- a) F* t2 J3 ]" ]; v; E; P for (int i=0;i<nSeqLen;i++)) F/ }( K! f5 D
{
- ^; E8 p7 G9 y array=new bool[nSeqLen];+ q3 N8 S) i, o* d$ q
for (int j=0;j<nSeqLen;j++) \+ }6 N z3 \/ P, I" }
array[j]=false;
7 m/ g& X2 n2 P9 D, ~# c }6 |9 q- T5 P2 o J: ?
//The main loop7 E! }/ I/ L2 {$ I3 _! K; B+ j
for (int i=0;i<nRelNum;i++)# n! |" M* \1 b/ b7 i+ c( `
{
1 f# {* q7 A V4 S& t char a=strRelations[0];
( _' [$ f$ _5 s3 O: I. v0 N) H char b=strRelations[2];
+ l# m8 {6 \; f0 H7 a) g7 I$ G assert(a>='a' && a<'a'+nSeqLen && b>='a' && b<'a'+nSeqLen);: ?* j. [5 e$ Q! L3 d4 P& L4 p
array[a-'a'][b-'a']=true;4 F4 e1 C8 }; e! ?
) v& c+ V- |( W' K Marshall(array,nSeqLen);
' `* L3 u& ^/ y+ S J
1 t3 P# Q# |- J% k, M5 U! v( i //Check for Inconsistency after every relation) C( ^. F: J) Q: p- C5 X
for (int m=0;m<nSeqLen;m++)
; J' b2 N" }7 o6 q6 s) y& J- m {( |: h- h$ X( f! z
if(true==array[m][m])
' W7 E5 B: g v/ o0 E( Z& \ {. B* R {3 r! C
cout<<"Inconsistency found after"<<i+1<<"th relation!"<<endl;: V9 w, R, f8 |3 d+ a8 ]
delete []strRelations;
& }& c2 k1 {, g0 U+ {% t. p8 g for(int k=0;k<nSeqLen;k++)
/ |+ m0 i9 b& b# d& B' e delete []array[k];
* U, ^0 ^! I7 U3 z) F* P) H/ v delete []array;
: X2 O% g1 m6 k) T delete []Seq;
% A3 K) P9 L! x4 \) Y1 f/ t- T- ? return 0;
" Y+ i7 |3 m, w! w! x- U2 a3 _: y$ a9 ]0 S( ]
}2 S: b; W, F: G9 s! L: ^
}
% [8 c2 ^0 X9 X; }4 ^1 P1 G" G; ?, M& X( d/ n5 h) D
//Check for the determined sequence after every relation # y( K! Z$ Y; `$ x3 Y n5 j) h
for (int j=0;j<nSeqLen;j++)
( p) I9 A6 V; v" c {: ?# `6 j% @6 m; ?2 s; R& a' Q# Q
if(true==SearchForRoute(array,Seq,nSeqLen,j,nSeqLen)) f; I+ J5 g# B) x
{
( w/ r. d- Z, H cout<<"Sorted sequence determined after the"<<i+1<< "th relations:"<<Seq<<endl;
# b' z& _! a4 ?6 Z delete []strRelations;
0 H3 j0 c- V( t for(int m=0;m<nSeqLen;m++): U( e1 T' t) w |' u9 T
delete []array[m];
' p( d" T7 E* Y1 I: y delete []array;% E9 l8 m) f p7 W. S5 q" L
delete []Seq;
: v# W/ ^: d# O/ x( ~+ S return 0;/ p9 G* i% _& j0 I6 r8 F
}
. d% q( Y2 L+ x }
7 N- n) J, ^7 \$ a) p, V" E" }' A! F+ R. K
& C* z% @- _2 O% i* `) h, G& V }
5 ]0 ~# N- b( C9 m //If the program has come to here ,then the relationship hasn't been determined!!!4 q* K8 p+ z1 K+ A# Q
cout<<"The relation can not be determined!"<<endl;4 I- W( U; `& U0 R( V6 r- f5 r
delete []strRelations;( L$ H- O8 n K2 L+ o p0 U4 x: n4 L# N
for(int m=0;m<nSeqLen;m++)5 E5 e/ {7 \6 Y+ b+ @/ r. B$ [
delete []array[m];- X9 R' p+ J- r& Q
delete []array;
1 H( i' e" t8 H! t w6 I! V delete []Seq;
# P; S. U. E2 `/ M1 g
+ w7 o* E4 t: r: @ return 0;
8 m5 r# [8 U. e}
" U6 t5 |$ Z4 S% R j6 e( `2 c) h
3 T3 N4 ~; f, r8 Q. K8 z程序解题二:#include"stdio.h"8 J9 j. v8 W( R: V& l0 z6 }* i
void main()
g+ O& Y' D2 Q! |/ E" o/ Z{
8 b3 C; `2 J5 q# m4 A$ O6 D int n_m[100][2];
8 @2 Y" ?9 j7 c3 P5 Z char re[1000][3]," Y2 \* L/ l T W; b# o5 l
temp[26];) |( X3 O9 K, k( a( [9 Y" m$ x
int i=0,j=0;
* q; [2 }; I9 w+ Z7 p scanf("%d%d",&n_m[0],&n_m[1]);7 H0 b+ l1 h( ^8 m5 B
for( ;j<n_m[1];j++): `9 T, V5 k* U9 K0 X l. e7 w
scanf("%s",&re[j]);1 ~, O7 G; E! ]7 h
while(n_m[0]!=0&&n_m[1]!=0)0 X) d# W9 v) p1 k
{
_: b1 Y( @6 ?9 ] _' q i++;
- y, I' Q1 z, u2 |# E scanf("%d%d",&n_m[0],&n_m[1]);+ t/ F- s) R8 x, o* Z* b
for( int f=0;f<n_m[1];f++,j++)
. n6 v3 I7 Z @9 F scanf("%s",&re[j]);
: C' q# H- z- W, x1 Z7 L }
5 w: ?; U/ x1 i: l0 w3 ` i=0;/ q1 K. O1 J$ Q; i/ a2 h5 s1 v2 s
j=0;
( E# e6 r# {) T7 g for( ;n_m[0]!=0&&n_m[1]!=0;i++)" N5 f8 e. U5 q, a% @
{
6 S; f% k( ^6 E8 Z/ c int a=0,b=0,l=1;9 g+ K% `- @+ w6 j% b1 x
for(a=j;a<j+n_m[1]-1;a++)# ^* J0 J" X% R# S: g
for(b=a+1;b<j+n_m[1];b++)' N6 R; s6 s) K# t8 U$ Q2 a
{% B9 P- e& g# l2 w2 ?4 y
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])! y+ F' P( ]$ ~
{
- r; X/ _ J, [2 D5 ^7 a V l=0;7 E, |- `2 y2 V* e( A7 |7 R
printf("Inconsistency found after %d relations.\n",n_m[1]);
$ _) A- {0 ^, l; e9 F break;
/ I! I/ }' f8 \! c6 g }/ e' }9 N a( @# f7 k& l4 S6 f' k
}
- K/ O1 c) A' a' ?" l8 F if(l==0)
& R0 E; W+ X2 ~' G" O continue;//Inconsistency found after x relations.- I* K3 a$ D+ ^) c6 y# z. E: K- s
else{5 U& M" x+ R" h6 [; r' ]
if(n_m[1]<n_m[0]-1)% E) c( C8 e, w
{2 k$ X C: `; X _ d
printf("Sorted sequence cannot be determined.\n");+ X6 Y6 ?7 S) H& P
l=0;6 q9 O( e! j5 q% W1 G5 [/ K% g
}
5 v! o, c: B. W( G7 Z else; ]3 g9 H' i" m9 e, s
{7 Q. x* T5 v' R" c: t
if(n_m[1]==n_m[0]-1)- m2 V5 h% B& r& r) w" B
{
, ]- y& J+ _3 f9 a8 d( h% r* f int k=0,p=0;) _, ~, K8 I6 l1 z6 I7 P
for( ;k<n_m[1]-1;k++), ^* K" E* e9 a5 C
for(p=k+1;p<n_m[1];p++)9 V. N7 h2 B; Z" g" l4 a# k C4 L
if(re[0]==re[0]||re[2]==re[2])
3 R4 K$ ?+ \1 G7 j& n {3 _! C7 Q! m' b6 b; ]9 h
printf("Sorted sequence cannot be determined.\n");
, I7 j- b* E/ f break;6 {- o' }, X# l# Y' W4 w
l=0;; x! F/ O# S% n0 {) k7 ]
}
6 {8 M- f& L8 `7 D& D# t1 O+ q }
/ @8 n: y; P# @9 S2 S }9 F. W& v% v) L* |7 n8 s% f
if(l==0) & @. [. U) u4 P2 U( c1 @' o' W9 P7 A, Y
continue;//Sorted sequence cannot be determined.
( `/ d; {# @& U6 O* U6 d
% ^3 I( Y; b, S) f/ s5 F n) b7 z else, D5 C6 ]6 e3 F H+ ^2 b! B
{
% l, S& e `: f. H
7 r% y# m# x5 s1 L for(int k=0;k<n_m[0];k++)
; M6 y) s$ Q3 k' _- B temp[k]=k+65;
, t+ L! V3 C4 c/ E( ] for(k=0;k<n_m[1];k++,j++)
! j6 i; W3 u; u4 s: M0 C {7 q% K- i! D v2 y. X
int t1=0,t2=0;1 `3 Z n' _3 K" `( r. I" U# e% D7 q% F
for(int s=0;s<n_m[0];s++)
5 v1 v) e5 r" ]" [+ C: } A Y/ I {
& u+ M' C6 }6 }" b* } if(temp==re[0])/ B& ?6 Y; ~$ T. ?: e% O" b! S
t1=s;; z9 ^- g! ?% Z% l1 j+ U; y
if(temp==re[2]): q0 }. {2 N( J4 O$ Z+ J+ r! p' A
t2=s;
2 m# f1 U) `3 z! F' F4 X% ~ }
2 z' c# M v. U! B; A A if((t1>t2)&&re[1]=='<')
+ G0 ^) `) B/ w# \, M { T% `) h; N5 Z3 A# i
char t3=temp[t1];
4 X$ ], [( E- V9 ~ temp[t1]=temp[t2];
( |" v/ U p" @, Q6 \" ]) ] temp[t2]=t3;" b7 U6 H- q0 t8 H6 i8 L- v' J' C
}- U! X& K# P9 M$ G* q1 r
}8 q9 a5 ^# c1 C! {
int count=0;( g/ X5 u. d% Q2 ~3 U. {7 x
for(int s=0;s<n_m[0]-1;s++)
. _4 i" v7 Y1 H9 J7 ~0 P/ n for(int d=j-n_m[1];d<j;d++); [2 l3 ?$ n* r: [, Q4 u
if(re[d][0]==temp&&re[d][2]==temp[s+1])' k' d# M( `+ @6 G. z- M
{7 I# H4 E# }7 G0 {$ Y
count++;8 S7 j% Z1 B7 Q/ J$ |5 }
break;
& d5 V" I( }+ f; R }
0 ~0 E2 R" D+ S9 F# J& Y if(count==n_m[0]-1)5 }1 Z0 R# m: y% m3 A
{
2 o Z6 {; y4 ^7 g. \ printf("Sorted sequence determined after %d relations:",n_m[1]);
5 P3 \6 V$ P& m2 l- o for(int f=0;f<n_m[0];f++)
; S4 y9 ~& W2 a7 C printf("%c",temp[f]);
4 y' q2 t$ | f* G printf("\n");
# P' p7 M. W! g }8 v: B" @3 h9 k6 V
else9 ]- p' }% H7 z% c# R1 @7 ]: @
printf("Sorted sequence cannot be determined.\n"); 3 I5 d1 L3 [ {8 \
}0 d. x2 L) I: u% a# S
}
, y1 Z8 A/ X9 ^, F }4 E; [; a2 j& i) Q _
}
' k* I, q8 {# R) _; Q; p& Z2 a" T+ Q+ O4 ]
5 r( l8 u; y7 ]/ T, I- d
3 P+ z6 o5 J6 g, V. O4 |8 Q
- B: b9 w1 u- w/ `7 J V! u
3 z3 T1 e- ~$ u4 I: n) B. q
7 z) m, L/ C+ }& X6 E' w' ~ k9 ?* A ~& g+ O5 o
4 n4 `8 W) m1 `+ A3 ^( |1 @1 Z8 o
来源:编程爱好者acm题库 |