本帖最后由 厚积薄发 于 2010-5-6 18:40 编辑 3 z7 M9 m# W4 p, i5 X
3 u# a: g7 s. b; bSorting It All OutDescription/ i% P- d5 b1 q9 n5 p- h* q+ J
; p7 B3 t0 m. b8 ~1 _# T) t% zAn 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.
0 g$ }# h: m% S. _Input
7 B3 m! K2 p" p- P* s% k' S+ P1 z7 v' F5 s0 g7 \
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.6 u, z+ u" K8 B' o1 R" }
Output. @: L, B8 p/ A$ a4 {, ^
8 W a$ O' k% x* o+ V5 C
For each problem instance, output consists of one line. This line should be one of the following three: 5 e! b* ]; X: @( \6 Q' y
. K, W9 q8 Z& @3 V! N; H& U
Sorted sequence determined after ** relations: yyy...y. ! u4 ^+ V5 T( |
Sorted sequence cannot be determined. 6 I Y% ? Z; j6 t9 N A) u
Inconsistency found after ** relations.
5 Z1 J7 D0 O9 F0 M9 ]+ e# M9 H! n+ \6 X
- B' Y! X" `% X' f* ]( dwhere ** 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. $ Z7 ~; W8 f# t. o, n
- R! X/ `4 ?# _8 o! H8 L, n1 U! M输入样例 # \- |+ s7 w5 A& i! d
4 6) ^' W1 c3 ^5 i- ~1 M- x* K/ A
A<B: G% y2 v8 p! p3 |; z
A<C
}' m5 G% A+ q7 b2 q( F! cB<C( Q- ~9 h( [$ R5 H7 d. ~0 o" v
C<D$ D# u: L' N; z$ X2 \# k
B<D( N/ {' p- o+ m4 V9 C0 ]7 {
A<B( n9 R/ v, N ]7 Y0 T% c
3 2, O5 K' m7 X9 n5 c
A<B3 W7 A) i& C9 j l' d
B<A
& Q& B- W" c1 v) A* Y26 1' r2 i$ G, X( Y) \0 D( \6 G$ O
A<Z+ g( x5 ?6 i; w+ k+ W; _
0 0
0 J b( f$ A* Z7 B. B2 M1 p0 P ! X" w, \# u9 N6 D3 m; H
输出样例 # o1 G% T( k% H$ X& ?. w( Q
Sorted sequence determined after 4 relations: ABCD.- C4 W$ i# m5 t% _
Inconsistency found after 2 relations.
; w) u* D% I% ^$ e" jSorted sequence cannot be determined. 6 n. G; ]- ^3 l1 Q' s2 ~
Source' P: h$ O" o/ T9 Z
* n8 s0 f; q- @9 G. H- `7 dEast Central North America 2001
. [$ m( V+ G% K# g Z- j1 E程序解题1:
3 ~/ F1 h5 R" q9 Y4 }* [//By Jackie Cheung
" ^' k! i! W5 |. N#include <iostream>0 a; a) a: y, g/ T5 R
#include <string>
; F$ j8 u ?% g. a1 y A#include <cassert>! q+ T2 H2 O) {. s- c
typedef struct tagNODE % Z+ { z- H: `7 y, k5 W. v. z
{& l/ O- F; @& Y2 r% X4 j) g1 ], s/ x
char val;8 e% g* C/ W& K# w$ K" o" o
struct tagNODE* link;
6 W9 d8 f, {; r/ O}NODE;
. u- f: y6 O- \4 k- }8 k2 ^using namespace std;8 v) x5 {% S X" v, q
void Marshall(bool** arrary,int n): I. V% V; Y7 z7 g. z3 J4 O
{
% m# T* j0 T5 e% P$ x9 \! n9 f for(int i=0;i<n;i++)6 F$ b+ {6 I& p0 g; P E9 d# \9 j
{
7 X, M: L5 l4 a0 a for (int j=0;j<n;j++)
" z" [' \3 X, t$ |; { {, D! [8 |' A8 f1 `- h- W! T, x
if(true==arrary[j])
$ B$ n8 J1 N- D for (int k=0;k<n;k++)
6 f# G& W, d+ I. r' t3 y8 X {
+ H" \# f' S y" X) b( ] arrary[j][k]=arrary[j][k] || arrary[k];
' A$ R0 [3 j8 m; p% { }0 k8 I) @% y! v( y
}# X4 K6 K; J o& L* e# `4 b
}8 l* U0 A3 G1 {5 `$ T
};0 q$ U/ X: f M
bool SearchForRoute(bool** array,char Seq[],int nLeft,int nIndex,const int n)
% W1 x1 e. m6 |) s. a0 x{2 R, R+ [* D( m; F0 Y
Seq[n-nLeft]=static_cast<char>('a'+nIndex);% q1 n' |! g5 L {+ `2 D* e- I1 O( q
bool bFlag=false;
2 v4 n- c8 W6 l8 W h9 M' W if(1==nLeft)& V* K, x0 B, ~2 u$ Q2 a$ h
{
; l/ {' w/ N/ m" t Seq[n]='\0';! z2 ?" }3 e) E1 v9 k9 r( O
return true;8 u. q& j* X' l$ Z' X
}
9 B/ l$ ~% u+ \" s# F for (int i=0;i<n;i++)
6 `2 u; B$ ]4 h$ k8 p1 ~ {+ l3 A9 z# I+ i8 S. t
if(true==array[nIndex])
! M+ R5 M0 U, \- I0 F0 E {5 c0 S: r) u9 B! ^
# h O; ]& K* I% @9 [ bFlag=SearchForRoute(array,Seq,nLeft-1,i,n);
. H; `1 @! B8 K8 q }
& {* d! \5 c$ Y/ L if(true==bFlag)9 A7 k; @, ^! E t3 u
return true;
$ [, x5 Q* T: d4 J- A: {- O5 z }! Z+ f& f1 I8 H- w9 \0 O
return false;
. x, Q: v6 B* c4 _1 ~4 d/ v, x};
) u( k- T" a, c& i; q* {* n9 pint main()5 E" X4 s6 d5 J2 C" }. |
{
, O6 W7 R7 a+ |3 J int nSeqLen;
- R; V% g# h$ |" Y int nRelNum;; F, H2 d* H6 P- D) ^5 `( N
cout<<"Input the length of the sequence:"<<endl;
3 {; a# F' f; B+ E cin>>nSeqLen;+ @2 P+ b& g; N, K+ r, U% {/ {* ~
cout<<"Input the number of relations between the elements:"<<endl;/ ?) {0 q" h1 T5 y
cin>>nRelNum;% A7 {8 E, ]& ]
//1:if nRelNum<nSeqLen-1,then the relation can not be determined!
' J- B4 ^3 T4 z) [# ?% ? if(nRelNum<nSeqLen-1)
+ ^! v. _1 w6 c0 i6 }$ c {
# }+ Q& Z: }- ~% a cout<<"The relation can not be determined!"<<endl;) z* B" L" M; P/ c$ [' g. H/ s
return 0;7 ^+ g. S2 k: B4 S$ N" D K
}
7 ]4 w: S3 |' B+ r string* strRelations=new string[nRelNum];* x- U: p% |- Z" `& [) W
char* Seq=new char[nSeqLen+1];
! n# ?3 ?3 S9 Z/ d bool** array=new bool*[nSeqLen];- |# _8 k8 d [5 ^
& d; o; _+ J$ F( o' { for(int i=0;i<nRelNum;i++)
% C* U6 y* J8 h% ^/ u, _5 k+ |# F# S {% E! t+ L% @, e, y3 B
cout<<"Input the "<<i+1<<"th relation:"<<endl;
) ~7 L4 O7 l. O/ D$ E cin>>strRelations;
5 P( P' C' H/ ~. k: V c7 [' G }
" [7 b% \) t- ~. [ ( E6 F" J, K: \
for (int i=0;i<nSeqLen;i++)
; \ h! W; J/ S. ]& H3 B, T2 S$ F+ d. G) |$ P {
) S1 m: r$ g6 u. {4 ~ [! N O* \( a array=new bool[nSeqLen];
0 t# I1 e1 W5 d4 P for (int j=0;j<nSeqLen;j++)
' \& P5 L- n* L6 X) P+ } array[j]=false;3 k4 h# k% Z% T) v6 n9 v7 g5 A
}' m. [8 q- `8 {4 p- y/ k0 H4 w
//The main loop( U# s% {% H1 g: }, r0 Y8 h) f# [
for (int i=0;i<nRelNum;i++)
: B* x6 K. |; b/ j {
2 o; T' q! h" P5 w+ ~! j char a=strRelations[0];
5 t# g. Y0 ?3 G1 x char b=strRelations[2];& D3 _% q9 p5 O, e
assert(a>='a' && a<'a'+nSeqLen && b>='a' && b<'a'+nSeqLen);
8 ^+ x! V/ a1 g: Y3 C) s4 c array[a-'a'][b-'a']=true;
4 F' s, h! a. y. R7 _ t9 g K8 n2 F) }; H
Marshall(array,nSeqLen);
$ L" l( L5 {3 _) _
: ~; b; @% l+ J3 m //Check for Inconsistency after every relation
4 ]9 S, `; q! y, { for (int m=0;m<nSeqLen;m++)0 R. K9 s/ ?; H O+ b! c$ h: p8 J. o
{
+ M6 i% U& e9 [/ } if(true==array[m][m])- `$ t9 Y$ k. z/ J+ h$ a
{4 d+ Q, ]& a: o) b5 M
cout<<"Inconsistency found after"<<i+1<<"th relation!"<<endl;
7 @! [% p h0 A9 {% ]) L delete []strRelations;9 N0 e% V! w7 u+ i
for(int k=0;k<nSeqLen;k++)- P( ^% O, V, o! Y8 b" R
delete []array[k];' T( p r6 ?% e1 ?; ^7 P9 \# @
delete []array;# ^5 g& p1 d- l+ z+ ~* _
delete []Seq;
, i! n8 |6 f8 U+ P. d* ?7 Q return 0;7 R( a0 T/ m2 A4 N: v$ g7 L
. Z' }% H+ \8 {7 g6 ` ]
}1 p, @. S, ]) Z* G, C
}' L4 ^' p9 @8 ^, P9 P" F9 O
* d& M+ h, T- D8 G
//Check for the determined sequence after every relation
9 e( l( d5 q7 j) c; Z for (int j=0;j<nSeqLen;j++)
5 p P& N0 O+ v8 X+ ]2 X7 N* ~ {/ A3 |# B9 j+ W8 q2 W
if(true==SearchForRoute(array,Seq,nSeqLen,j,nSeqLen)), a. q$ \; G& r) I" o8 \& Q5 |
{, }; b8 H; D* j( p( T, F5 p
cout<<"Sorted sequence determined after the"<<i+1<< "th relations:"<<Seq<<endl;' a* d' z, ^, x- p$ l) B! Q. r
delete []strRelations;
8 T2 G( F; u3 T4 } for(int m=0;m<nSeqLen;m++)
: _$ a% B# d1 S delete []array[m];+ G* P! w* w/ N/ p @! N
delete []array;
: @8 m9 @: x+ t) m/ E delete []Seq;
6 t2 \, j+ {5 D return 0;
" ^$ g2 ]; Z2 D; [9 e0 o }
, U/ H' r7 o( c }
5 _6 M2 q- Q9 H6 u4 h# `- S2 u6 U
0 i- C/ P% Y* C$ Q4 s
. A+ z, m2 v) U! ]5 R0 B+ }0 ^ }6 M. [/ I9 q$ R3 O1 }; d- F# Q8 E0 O
//If the program has come to here ,then the relationship hasn't been determined!!!. g- K' l3 t4 H7 V( H2 [0 ?
cout<<"The relation can not be determined!"<<endl;! `$ Q- Z9 O0 F6 v
delete []strRelations;% x7 B; C3 p: P' K9 m7 |3 A
for(int m=0;m<nSeqLen;m++)
' I6 V) |; Z% C delete []array[m]; g) m3 ?$ ]$ r7 p- w, i! n
delete []array;
- L# X9 }" [$ P, I3 S! w! j- P delete []Seq;8 Y; z4 v0 y6 }
! R `( J+ H: j" Y/ | return 0;
! E6 c3 r$ l( u+ [1 |}: k$ w }: g r/ A) t9 f) r
5 b& \ G, t0 g4 u- ^, o9 ?3 E程序解题二:#include"stdio.h"
! D9 e3 A8 _2 k, i% P3 tvoid main(), ^, [$ p, l2 E& M' O0 a2 s
{' g0 Y! Z5 X8 g3 V* ~( z
int n_m[100][2];- J* f. r9 K! \3 `1 Q4 {
char re[1000][3],5 R {3 s( ~% j1 r4 f: u7 R3 I- ]
temp[26];; w& [5 ^- {* d, m
int i=0,j=0;1 ?8 L! E9 f( r! p6 Y8 n% l
scanf("%d%d",&n_m[0],&n_m[1]);
/ o9 k/ ?8 Q* P' u for( ;j<n_m[1];j++)
* ]0 `' j, j5 k scanf("%s",&re[j]); g! L5 @ Q* V/ G- t, O4 d
while(n_m[0]!=0&&n_m[1]!=0)
* d1 R# R s: v% s {
1 {0 f7 g7 N$ \( \ i++;
8 g' H' x3 u0 ~! P. C scanf("%d%d",&n_m[0],&n_m[1]);
# c7 M4 W: O; U) B$ _ for( int f=0;f<n_m[1];f++,j++) M, P9 m5 N/ Y
scanf("%s",&re[j]);# Z* \7 F. E4 h& x' }
}2 j. H2 a# A, B% H
i=0;
6 V- p" P& d7 Q8 |) I j=0;
$ ]0 z+ @0 D& q( U for( ;n_m[0]!=0&&n_m[1]!=0;i++)
e9 d. J6 i* Y) H' L. J {7 N2 V. D4 w% Y! @( j" c
int a=0,b=0,l=1;
8 m! D1 W6 k5 Y2 g! B9 u for(a=j;a<j+n_m[1]-1;a++)
8 B: m; Z' W( F5 [1 s5 ^' K for(b=a+1;b<j+n_m[1];b++)
+ c$ T$ M2 w3 C* V5 r( q {
: k/ E( P: H+ Z# ?! Z5 ~ 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])! E' \1 a6 Z- t5 T y: g
{
- E3 |# y1 M' V: {4 ]( s( s: { l=0;: ^3 r0 D3 a( F5 C
printf("Inconsistency found after %d relations.\n",n_m[1]);. q# P+ D# o$ Z' ?9 _( j% u0 ~7 ~! e9 D
break;) ~2 v7 i$ x2 \3 g+ n+ q4 J
}
' o; r* J$ l, y1 q3 h$ f" j c }
, x' D8 _5 [2 k0 B) E& p if(l==0)
& \0 H Y1 t+ R' V* \3 {" `5 o5 q7 I continue;//Inconsistency found after x relations.- V; O& ?1 d' Z$ _9 S
else{
/ ^ Q" D) z0 L if(n_m[1]<n_m[0]-1)
" Q9 n1 {# V# h1 j! x" d {2 F8 T4 p* b5 q2 O* l0 ~6 f H
printf("Sorted sequence cannot be determined.\n");. l' c6 h" ^" Y; u
l=0;( t d6 g9 U8 k# _4 V
}$ w$ K5 j2 k: H- W0 Q6 T8 d
else7 X- U+ [" y& J0 T9 ~# l+ ?9 @% \
{
/ z& v7 f& g1 n. j if(n_m[1]==n_m[0]-1). E ]* n( }9 m; y. Q
{ & u0 _$ C1 g) C4 q! R9 l! T4 [
int k=0,p=0;1 u2 A2 e% K9 O5 Z
for( ;k<n_m[1]-1;k++)! m T5 q; ?0 {& p
for(p=k+1;p<n_m[1];p++)0 R! m A Y- W0 w& f5 P
if(re[0]==re[0]||re[2]==re[2])6 }2 @) ^2 m( T, [6 K' H
{0 B5 w7 h n2 Y1 x8 L
printf("Sorted sequence cannot be determined.\n");
3 d2 {' ?* s3 P0 G1 x" u break;. N9 O; e! `+ _! f J, S
l=0;
6 w. X7 `3 V2 \5 n8 z) O }
' T: V& Y4 M- }3 m' l }
: W5 J L* U7 Y* i V" S, F }
& f- X8 l* f) J0 i if(l==0) ' |3 {" b* Y" @! h7 R/ H$ G, d
continue;//Sorted sequence cannot be determined.: _1 G& R" q' \/ j% F
5 ], p0 a9 p, k d1 V
else" x* [( Q4 ^) A8 ~& D1 P: v
{
5 ` C+ K) s7 I% s" n2 D 5 P0 g% g! Z& r8 q. u7 X7 `
for(int k=0;k<n_m[0];k++): V+ ^' i* b9 c6 {2 f( c3 Y! Q$ o
temp[k]=k+65;
3 I: _, x' _6 Q, C: |5 ~7 | for(k=0;k<n_m[1];k++,j++)
1 _4 X F3 y/ U {6 \2 {: j( ^* q; r# R
int t1=0,t2=0;, U8 L3 X. h' Y
for(int s=0;s<n_m[0];s++)) C3 n- V0 [) _
{
) ^2 w6 Q+ V( j9 t2 t0 ` if(temp==re[0])3 C$ {1 S" S. \* @
t1=s;
7 s4 {0 e- J3 | |( C9 r0 N Q if(temp==re[2])5 \8 c0 O& ~# i' s
t2=s; [; K, |; _ n; K7 Q
}
- G- i& C$ z; o8 Q2 R/ L! E* p if((t1>t2)&&re[1]=='<')7 A+ ?) A8 p/ q, G h9 M$ b
{4 P3 r' U, b& g) K9 k9 y; T
char t3=temp[t1];- ] f$ V7 D k( `" B! b
temp[t1]=temp[t2];
' a- Q5 i6 u' b temp[t2]=t3;
- j( _" @8 I( D. Z3 ~: L } ^7 T) \0 P5 n
}
9 U: D) ~" x0 q- g2 _9 j$ G3 F int count=0;
% H& i) B* z- N1 C6 t2 I for(int s=0;s<n_m[0]-1;s++)
. i R" l" a4 u9 a5 S; v9 I. ^# K for(int d=j-n_m[1];d<j;d++)
5 S) B, k1 L5 A if(re[d][0]==temp&&re[d][2]==temp[s+1])
) j8 ]0 S9 ~" W8 O4 T {
+ w% J$ Q5 r- I7 { count++;
2 Y- g5 M7 } l) X" X: e break;
$ f9 F) b4 L0 a6 `! F1 v! v }
3 T+ \5 n. g0 k2 T7 U! I* T/ h if(count==n_m[0]-1)
$ [+ `8 g ~+ T( K5 T {8 v# V" ?% q" f! L/ t6 m2 a
printf("Sorted sequence determined after %d relations:",n_m[1]);
5 O7 V: c4 n- N r0 z* \ for(int f=0;f<n_m[0];f++)8 L/ Q9 K5 G& ]- w9 Y
printf("%c",temp[f]);
9 F p; P$ W% ^0 H" L) ~8 O5 {/ i$ V printf("\n");$ i& D Q5 @( n7 \0 k' g+ ^- v
}) B( F2 d5 ?$ j; W9 h
else2 \; U$ \2 t* H) R- l! V s" ]2 j
printf("Sorted sequence cannot be determined.\n"); ) y0 _% J( t" G4 U6 [! J+ X7 W
}
0 { s6 b/ n$ G/ k* z S }
- E- O) T4 w) J* S/ J' g: S" m6 R }6 h; O2 Q) S+ G1 e0 e
}$ v4 V7 k' \$ w6 [/ j2 o+ D
; u1 r) F/ i. o8 |; w6 u* A% L& U- h
; j% y7 q! { J) i9 \9 O7 y# _
* {1 I6 N$ L5 W$ I( q+ |. U3 {. F0 O2 Y5 y6 n
: q2 Y% D& L/ S) n! X
& U( ~/ P4 D% p/ v. s1 a0 X; a! u0 q
6 w, B2 z" L! {来源:编程爱好者acm题库 |