本帖最后由 厚积薄发 于 2010-5-6 18:40 编辑
( A0 |# K$ \6 q' E8 t+ N9 D f5 n( O$ K3 N& T
Sorting It All OutDescription1 T- i i4 L; P/ e2 J; g
0 W+ h2 v% W# 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. . d' H& C0 I0 y, o
Input9 c- T$ _. [5 \& |2 ~
7 r" A% E0 U, a: B/ N5 c+ T+ O5 G
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 j. R. P$ C- T& _" L. Z/ aOutput9 K8 d" m4 @, S. w0 l, \8 K
( z) h0 z1 e+ B1 [( d- u3 e1 d4 m
For each problem instance, output consists of one line. This line should be one of the following three: ' v d. ]+ P4 T! Z( T$ p
. _9 i8 x& l' U; }2 u" SSorted sequence determined after ** relations: yyy...y. % m2 T# ^7 u6 G" e+ b! r
Sorted sequence cannot be determined. 5 l( E( k$ T+ E. q" w$ S
Inconsistency found after ** relations.
8 K1 _: r! D2 h5 N& J, A, q
3 ^- ]9 N4 p0 {- |3 k8 z1 I+ o7 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. . ?7 a& }' A9 o
Q$ Z1 N- y& n" @1 ^) F9 Z) d
输入样例
1 k! ]8 H |3 `5 J4 6
/ ?0 s' ^) o5 o: O6 NA<B
+ {& m, X3 v* q& Z0 `2 bA<C
4 n9 k' a" p) i1 Q: ^B<C# P* ]) u: Y+ b5 W9 h$ X7 r, L; [
C<D
+ [8 U$ P2 k' n/ k: iB<D5 Q( S) X" G o$ ~
A<B
4 x! d: {# R8 i: ^3 c3 2. `0 g# F3 h3 ~. D; K# h3 C& |
A<B
% t! q! m4 C6 G' r6 PB<A
( c& [( s# a" {- c+ n/ z$ x26 1
- ]( P. V5 g% j5 E6 PA<Z: v7 R! h7 \" F: p
0 0: b# j( A7 {( k/ H1 n4 B
9 E6 _7 f" b$ ?: P7 W# F输出样例
! m; N" o9 {8 K( y* B+ I6 eSorted sequence determined after 4 relations: ABCD.
# Y7 g T% P! y; U0 O# ]4 IInconsistency found after 2 relations.
7 ~" u4 E5 I- N r4 N! NSorted sequence cannot be determined. % H) l! p2 s. a; Y! ^
Source
0 U3 K* z; G1 g+ H/ {, k8 D+ U% x5 t. u/ w7 O1 R: e
East Central North America 2001
; q9 w& E' G" l Q: E/ }程序解题1:
0 r! x# { m) K9 Y: ^6 L" J//By Jackie Cheung
% d: O& L9 o% M8 i7 d#include <iostream>
$ J0 N1 t+ n2 L! W/ b#include <string>, L2 _8 m* f1 W9 s! Q: r7 M" F* F
#include <cassert>
% x3 V2 K) X. o8 ~: A. a* `typedef struct tagNODE # W/ R/ {1 k o- n4 j' ~% _6 ]
{" ^7 }& D' ~0 x& b
char val;6 T5 \8 [3 ^, L! h
struct tagNODE* link;
; D$ [% i) J9 }9 J! F. X4 ~- V}NODE;
9 A" J) P6 S, R+ x; p- ausing namespace std;
% F4 K7 L# N) Q: `void Marshall(bool** arrary,int n)
% ` g5 S3 }% ]" [{
% N& G2 H. I. f& S: F for(int i=0;i<n;i++)
! m, U* N! m) |, X: i( c" ^, Z {
* A6 e5 T, {8 u N) i for (int j=0;j<n;j++)
8 J* a, G+ g0 E& W {# J' i; G5 V3 b' D1 H7 m) {5 l' w U
if(true==arrary[j])
- ?3 S& t4 z: X7 p- p* e4 z for (int k=0;k<n;k++)
! [* k1 m0 }: T {* n* I/ K& A3 U( J
arrary[j][k]=arrary[j][k] || arrary[k];/ h6 j9 G; q9 x
}
. B5 x. l) R, S/ R }
; T* v) R: f5 ^% P }- O8 x7 i% D3 s) j0 ^' J0 S* q; E& f
};2 r8 G4 B! a% j* ]# w5 f
bool SearchForRoute(bool** array,char Seq[],int nLeft,int nIndex,const int n)
+ J' d) M0 G! d1 y6 I{% D+ O# Q) f" [6 _# G" Q
Seq[n-nLeft]=static_cast<char>('a'+nIndex);
( ]" H- H7 `0 H+ `. g bool bFlag=false;
5 k: V) I1 u! z. U2 U if(1==nLeft)& }( s2 D) a6 t9 F6 z4 u
{
$ F# E9 ^- V7 X7 e' G. w. b' Q Seq[n]='\0';
; W( D9 ?- j0 m8 c return true;
6 \8 K- z& d4 O& `8 O r }
1 F! b! l2 F' O6 X4 o! C4 Y) P" D! U for (int i=0;i<n;i++)
! e* m6 [+ b3 |4 T+ ? {. |. @) k) r( [7 d" S
if(true==array[nIndex])
9 n3 G$ A8 F: F3 l4 \+ J( c {9 ^$ v9 q* a" E
/ }$ E* d! ]* d9 U! F
bFlag=SearchForRoute(array,Seq,nLeft-1,i,n);
. s; E( j% I a V6 o) M6 _& M }
4 T' j- `6 i) Q) e1 } if(true==bFlag); j q4 V9 w3 I* B! Y5 \0 |9 Q
return true;1 U- m$ b7 [. r% ?* E
}
9 [, }* A' J" q return false;
5 X/ o# U! T& r' G9 W- C+ P};
* a" K7 T K) p) ?/ w+ J: Nint main()
9 T u" P3 i- b. a0 c5 B$ W* {{, R0 z' {; c0 t$ I+ Q+ T
int nSeqLen;( C! x$ ^5 @& O$ M9 E
int nRelNum;
% |3 D$ e C/ ^% R6 F' W$ A u cout<<"Input the length of the sequence:"<<endl;
. b5 h; T. `+ z* a8 D: N cin>>nSeqLen;# R2 L( _& }0 q
cout<<"Input the number of relations between the elements:"<<endl;6 }" A( ]1 `+ }0 f
cin>>nRelNum;+ K+ k8 f0 ^! M
//1:if nRelNum<nSeqLen-1,then the relation can not be determined!
9 |$ F( J, f/ R6 E8 D9 Z+ g6 C if(nRelNum<nSeqLen-1)
1 U; {8 a' b) K6 N {+ z! v2 B. Z s- N/ Q
cout<<"The relation can not be determined!"<<endl;
/ ~* u* [* |8 c: s) m' p) [7 _: T) _ return 0;
& G2 v8 n9 k3 Y) e6 b }9 ]/ f+ O8 ^0 Z8 A' H% ^. d
string* strRelations=new string[nRelNum];* h, }5 O8 j- w1 z! C( r1 r+ ]
char* Seq=new char[nSeqLen+1];* w* q R6 r, \
bool** array=new bool*[nSeqLen];* }! ?4 @0 ?' w7 ^7 r
, o0 G$ g: w- k1 ~ _ for(int i=0;i<nRelNum;i++) B& f, x1 Z! l ~3 y! a6 V
{
% F1 E$ N8 `# V0 \9 ` cout<<"Input the "<<i+1<<"th relation:"<<endl;
% t9 b% Y8 {& V cin>>strRelations;; @' _. m/ R3 e3 Y% N8 i9 o- ^) ?% [
}
/ o `8 q: @/ i1 M* J: o/ |* ?
. M* L3 }. [* ~( J8 M b5 b7 S4 s for (int i=0;i<nSeqLen;i++)
, ^! ]; z: u3 h# L" k {& ~$ q: Q+ ^4 ]* N, q+ N# U
array=new bool[nSeqLen];
! U7 S' P: @3 V% X/ S$ Y for (int j=0;j<nSeqLen;j++)
8 X; v& K* C6 X* H array[j]=false;
. a a: i8 Y- ^# [# I }
# h% U U8 s% S //The main loop7 z/ z: D" R7 ~5 v2 Q
for (int i=0;i<nRelNum;i++)
; a1 w: u! \9 K C( t7 q* E {0 `/ B; N3 v; v% F ^5 j3 k4 g) Y
char a=strRelations[0];
0 Q! ^" w# ?% N [' d" r char b=strRelations[2];
/ t0 _9 H+ H2 u$ j! v' ~# _. X4 R assert(a>='a' && a<'a'+nSeqLen && b>='a' && b<'a'+nSeqLen);
, R+ V' o7 L& s array[a-'a'][b-'a']=true;5 \9 M; b* L: O: l# \9 F0 @
7 R3 @3 R, R- j* [; _: z
Marshall(array,nSeqLen);
. ]6 b3 R7 O! D0 j1 d2 L5 r+ I z
//Check for Inconsistency after every relation) F; W7 v- D: w2 u# S% h1 I$ _8 \" X
for (int m=0;m<nSeqLen;m++)
$ N7 O* C d& E ]7 I: e% V {9 {1 P S. d" U- \2 I6 P1 R
if(true==array[m][m])
2 g# V1 O& ~$ [. P" g7 h; q& m* ~ {
! F, d9 w- n( X, x0 f cout<<"Inconsistency found after"<<i+1<<"th relation!"<<endl;
$ A2 e) X6 V% O* |0 B delete []strRelations;+ ~" J; L2 N* ~: S& e* h1 E
for(int k=0;k<nSeqLen;k++)7 ^7 {4 }5 B6 f2 A3 K4 n2 G1 }
delete []array[k];1 N: G9 N0 M6 b- w6 q; P: b$ w; P! g
delete []array;
; C! C5 {2 H# E2 K delete []Seq;
3 C1 v7 X6 D( ~1 {7 K2 ] E return 0;) M4 h2 v3 L4 [, H# G _% C
: o* Z+ F. a' K c }
# x$ M7 L6 J( [2 Z* o6 N# A }2 z1 p1 S i/ c# |- Z; p/ I
) M/ U. q( j9 g! X& Z* \6 R# M
//Check for the determined sequence after every relation ' n O& w1 h/ K' g& n' Q
for (int j=0;j<nSeqLen;j++)
) t$ R7 {# p8 _) Z3 N/ e {0 c+ X/ b% l5 W6 s6 `1 z6 T
if(true==SearchForRoute(array,Seq,nSeqLen,j,nSeqLen)). N" a6 ^1 y; P3 C0 T3 Q: K5 W
{
1 c+ m9 I/ F# a, `1 I( f cout<<"Sorted sequence determined after the"<<i+1<< "th relations:"<<Seq<<endl;5 A9 L" i6 v! K4 C# r0 K' C
delete []strRelations;
5 W! r# M) R: {) W2 d for(int m=0;m<nSeqLen;m++)
4 K/ x1 k* o7 y6 ~" h/ ` delete []array[m];" E& e! k8 d. e3 u: {
delete []array;
* j" Q0 e# l5 [. V7 e- W delete []Seq;
* a) P+ u7 `0 |& _ return 0;2 S6 i( }( F, [% ~9 T% Z, I
}2 n3 `, }- Q; j6 M
}
; h* O/ a0 u1 Q! K
6 f+ B0 j' s, `$ q. D" O5 n8 d
6 m( X; s0 O, c% L+ Z }
5 ?, r, c# K1 i1 Z# T# h //If the program has come to here ,then the relationship hasn't been determined!!!
, |) E+ m8 }9 n8 D6 s cout<<"The relation can not be determined!"<<endl;
* n, B7 @: V6 ? M( P2 } delete []strRelations;/ p' S4 ? L) b+ t0 H8 n0 e: ?
for(int m=0;m<nSeqLen;m++)1 D' ]: ~" K( O5 u2 d
delete []array[m];
* w! a+ |2 q0 z+ c& o delete []array;3 e2 ]3 E: f/ v( o
delete []Seq;
" _4 E$ h1 ]+ M7 y0 g, [% y & {8 e1 l- _* x8 y
return 0;
6 U/ g4 J7 T1 {( {- I}
/ m' g: A( d7 [8 x, z
' R3 g% S b8 {4 x/ z6 Z程序解题二:#include"stdio.h", v" {: Z# }, b, ^' X* A/ x; u
void main()* e9 t& a! ^# ?# y6 l8 i* F7 y6 O
{4 r7 t$ d; S1 v U% @
int n_m[100][2];3 p& n) J- W- E
char re[1000][3],
) l0 C1 ]1 o+ U( r) u G temp[26]; @. U: S; e4 E. ]3 o3 F( h
int i=0,j=0;- p! ^: H! e3 _6 [# W5 [) q
scanf("%d%d",&n_m[0],&n_m[1]);
" t* P/ g4 W- p for( ;j<n_m[1];j++)9 U) [& M9 o$ Y$ q
scanf("%s",&re[j]);
. u5 G4 w8 _4 C1 l# q4 b! x" z- [+ @ while(n_m[0]!=0&&n_m[1]!=0)/ Q1 Y! [' u8 m
{
, Z- W2 B; I% M, A+ f+ ~9 @. ? i++;2 k! m& G+ j+ ~ b2 _; K
scanf("%d%d",&n_m[0],&n_m[1]);+ D/ B" U% a0 o8 V: s
for( int f=0;f<n_m[1];f++,j++), J7 m C. H- @" \$ d
scanf("%s",&re[j]);
( `3 |% x9 Y& Q [8 \ }
% B3 G( W- K, Z, h% M5 l i=0;
: j; z" H0 l- R: C. W j=0;
5 o/ b9 X. D& B for( ;n_m[0]!=0&&n_m[1]!=0;i++)
- Q& o4 H6 M9 B {
* i6 X, G6 Z- k- | int a=0,b=0,l=1;
7 }9 f0 O B. }( M for(a=j;a<j+n_m[1]-1;a++)0 Y8 v/ N+ \+ C5 s" |2 T
for(b=a+1;b<j+n_m[1];b++)
. Y0 j$ s* X, D* d- X" Q7 W {
& g1 @3 A0 ` m0 H# M# a! X 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])0 P5 D N q8 M
{- x% j! q+ R) l6 y" z5 z
l=0;
4 h" e9 o* l; }- W3 h printf("Inconsistency found after %d relations.\n",n_m[1]);
# l p/ t/ W/ _7 G2 W# }& ]9 Z' r break;
$ c* Q) M3 U' Z% f6 [3 I* e }
6 g/ O; y% R0 r' i6 h, ?9 k! z }
% ?, d7 A- `- K9 c( ~* F7 t if(l==0) y4 l: U: h3 I5 L. L
continue;//Inconsistency found after x relations.
# h7 D& j* J: H% O& P else{
}7 m2 `' n: x( _( X& | if(n_m[1]<n_m[0]-1): M! c7 K+ Z7 A9 \9 R1 M x
{
1 b4 r; x' X* [3 a5 t( d2 h( e0 i printf("Sorted sequence cannot be determined.\n");( A F5 z* M8 B% l
l=0;/ F, ~" e& I3 y8 O) y
}9 g- ~/ @% W1 ]/ R
else) a6 i/ i4 I: D! c& d
{! y" g9 i- T, ]7 q8 Y2 m0 q
if(n_m[1]==n_m[0]-1)% n' w/ F' l7 Y- e0 Z3 b4 M# Q$ k
{ & Z3 {2 y# Q% X
int k=0,p=0;1 I9 n- s" C1 }2 t/ Q
for( ;k<n_m[1]-1;k++)/ T6 x# Y4 M, Y& v
for(p=k+1;p<n_m[1];p++)
1 }, S; t3 y+ c if(re[0]==re[0]||re[2]==re[2])) Y5 E" Q% m7 `
{4 r) `1 `$ n5 g! a
printf("Sorted sequence cannot be determined.\n");
" S( F: R! d" M break;
, U1 T& m) y- f2 `+ @ l=0;
% D9 Z- t! G1 I% t: L' J5 l } o" |' Q8 V8 A* t( E$ u
}
2 |' n# @" s. u% k2 X: u; S! b/ x }
" {- V# ^8 u' {6 x q if(l==0)
0 z$ M. z3 Y; S& i continue;//Sorted sequence cannot be determined.
! z% {- m$ ^4 \" K; A
, t1 o/ |; A4 }8 N6 L" v else
9 [" R. ]* |; z4 ? s% L( L {
3 z& D. R, m9 p8 `, V* C# T
0 v X' ^9 t' H) c# o for(int k=0;k<n_m[0];k++)
- F- F5 [: R* E4 N$ e temp[k]=k+65;- U; l3 {/ h5 a7 o5 G
for(k=0;k<n_m[1];k++,j++)% ^ s, P5 E% k, i
{' ] e& | X x3 ^7 Q" y
int t1=0,t2=0;3 J8 p+ v. W6 ?. d* P, F- X; E" ^
for(int s=0;s<n_m[0];s++)
+ Y7 s. f* i/ K4 X3 I. D: Q& `* R {
% [$ F1 T3 l9 I& ^ if(temp==re[0])
# q; K/ o) Y' l! G G* f% F- K. d t1=s; `( T6 {2 U$ b# L
if(temp==re[2])7 r* o# z& p5 Z& A4 Y; `+ m, v
t2=s;
/ o' O, D: G% X; |3 C% P; W }5 S N8 Q! \/ M9 _0 v% W& N! p
if((t1>t2)&&re[1]=='<')3 n2 S7 F$ g* `0 B: V3 p* x
{0 ] i6 Z: W3 C+ \
char t3=temp[t1];
- f2 ^) m' t& B$ Z4 K/ z8 b temp[t1]=temp[t2];
0 J% N- R! J6 o+ W temp[t2]=t3;. [, ^" e& F- E! F
}$ s5 c e# A7 ]
}
: k( M6 d2 i# w& t. E6 f! \; } int count=0;
4 v' B9 p; U- m4 l4 j, ?! X' _& ^ for(int s=0;s<n_m[0]-1;s++)# ^3 k/ j: |2 g; I5 ]' h& D- [
for(int d=j-n_m[1];d<j;d++)
& {2 B. K5 y5 d& { if(re[d][0]==temp&&re[d][2]==temp[s+1])
, s% I* w# C( \7 \# e; V; m {, w+ C0 f* F) I8 m+ |
count++;$ t8 h# [% w& E
break; X( W7 A5 E4 }* ~* l" E3 f/ g
}: D0 g3 w( N) R6 L
if(count==n_m[0]-1)% x: D; |1 @# c5 c, k3 g# U
{
5 v+ [, G; ?# D# A0 R' X printf("Sorted sequence determined after %d relations:",n_m[1]);
' S. T1 S% X( s- d0 i ]$ C for(int f=0;f<n_m[0];f++). t: `+ l w3 I2 c0 q
printf("%c",temp[f]);: T, {7 D! q$ D. Y! n8 Y# \
printf("\n");: D2 k+ d( P o
}" ]: ^2 O; G+ y. G8 V" m+ u5 ]8 j
else7 q" K( z$ {: \9 D7 [0 P
printf("Sorted sequence cannot be determined.\n"); 3 q* w7 Z/ p4 d
}
9 v9 u6 V/ U) d6 P* |9 d t2 b3 N }) W1 B' y: Y. ?
} j: N1 N& }0 V% k
}
. |& g4 q+ O; E7 d7 A8 b' P7 T# u& h$ R$ U* a$ J4 c
' [ M7 L5 B, y( d* C2 F6 M& A
9 @' [: e' C% B' x+ Z8 X
5 ?0 J4 q. k) D% T. x6 b9 I3 E8 u0 B! b& M1 }, \
! x4 w( o8 c" q) F" v( E7 o/ R: B8 x. _& b6 b! A0 L* M/ x: p/ }
0 n/ G% @/ _( V; {9 L& b来源:编程爱好者acm题库 |