本帖最后由 厚积薄发 于 2010-5-6 18:40 编辑
, R2 V+ L4 R3 W" U# g, Y% r0 U! j D6 V& f
Sorting It All OutDescription6 t$ i5 Z6 y# r# t: P- D
( e! N2 Q" |; U' X B# P# v9 F% H
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. ' V3 h* [3 \. c+ a7 L( X$ d
Input8 K2 \3 @! n( Q1 P7 d8 c1 h. }) _) p
2 v0 Q6 k1 B- Z5 r" n& r; E
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.! E/ x% o& \+ T
Output
9 T- C8 {9 \6 Y+ X% t ^5 |7 L2 U9 c
7 h3 M- o4 O0 i; n5 m2 ^3 o: wFor each problem instance, output consists of one line. This line should be one of the following three: + N r, k- e! t0 B
8 P! c) d7 I# o! E& G
Sorted sequence determined after ** relations: yyy...y.
9 L8 [8 O- ~& y) E( y( d2 K6 JSorted sequence cannot be determined. * b7 F: N6 N" T+ F$ l ^$ N6 s
Inconsistency found after ** relations. n9 |# [5 j: f" G0 T
3 h. \9 N* h1 t u6 G5 J6 }where ** 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.
8 `$ q0 Q; V- d+ n; k c; K# z! s K: k$ L% ~
输入样例
3 b+ j% o/ z! W1 I6 x/ J4 6
7 l2 w( r+ M3 m, V4 s! HA<B
3 G# x# ]! O; wA<C
* } ~ `9 V8 UB<C
0 o6 b/ p7 T! b' R( s9 `7 Q9 RC<D
8 ~7 ^2 y9 P# WB<D1 j( S5 {& v( |' D% R9 @' \
A<B3 s& T- E3 E# P+ I
3 2! ~+ n) @6 V2 X/ c8 E
A<B
( w% X* \; K# t' |! h. RB<A
) w. {/ }4 a2 q) @: m, z! q26 1
. v. [2 n* w; cA<Z
& ~6 O- y2 M: D' H0 n+ v0 07 z/ b0 K! K% h; i. p& P. M5 [
0 S& ^7 t0 G/ W ?5 s
输出样例
/ V4 n; t7 n! A1 M8 A) M" OSorted sequence determined after 4 relations: ABCD.
7 [5 q/ G9 F4 j; xInconsistency found after 2 relations.
+ b( U( a7 \* ~7 cSorted sequence cannot be determined. : C( d- d/ @1 D5 h
Source* D. w& g# O1 `# T
' f2 j* C; c# h1 }- `+ h
East Central North America 2001
2 \. q# G% L& p8 p8 ~程序解题1:
$ z+ s$ i2 {6 ]" t) ^" e//By Jackie Cheung4 O" y' n$ E- X* _& t) ?
#include <iostream>5 D$ ?. e8 A2 X! n: Q
#include <string>
0 i- d' M. ^; A5 ~#include <cassert>
/ S9 M; P/ V. k0 v9 j' ?typedef struct tagNODE
* p- e; J& ]! X) b{3 k# N0 |6 K- V; q! g
char val;; \, a# M' }, j% N/ I! a h$ p" w
struct tagNODE* link;
0 K Z* l9 W( m7 x1 {}NODE;
# C y2 `: V+ @( ?6 iusing namespace std;5 } J7 d3 W$ V, `
void Marshall(bool** arrary,int n)( d1 j" n! _+ I& y" z
{
1 d+ u6 O& x# L0 J6 R for(int i=0;i<n;i++)" I# o. R5 P& u2 Z W
{
4 N2 M; h3 m- g+ x! b% q for (int j=0;j<n;j++)
1 ]/ h" ^( e0 M {
# J4 j6 b/ b5 p1 O if(true==arrary[j])8 u: r2 }2 n3 d$ I
for (int k=0;k<n;k++)
9 t8 _8 D/ [1 W( l" J {
: ~* t* G$ d1 ^% A. X% K% ^$ [6 i arrary[j][k]=arrary[j][k] || arrary[k];
X8 U* v: d/ Z3 o& g }8 N5 v0 t% ^% F
}2 b1 \ Y3 i4 T% D
}5 {# j' ?' v; }8 E
};
' _, M& s6 U! Obool SearchForRoute(bool** array,char Seq[],int nLeft,int nIndex,const int n)
' A; C& s# a" {: V# t{
4 a; u# \$ J9 j& S9 S9 K: U- N7 ] Seq[n-nLeft]=static_cast<char>('a'+nIndex);2 ?: a4 y5 ?" m1 D6 y+ S. s1 A% E* q1 T
bool bFlag=false;) D% \% d. W) }1 i7 O
if(1==nLeft)
* h9 G/ q) d8 G! a0 L {' \9 ~" R# Z/ @ [( k- r: S
Seq[n]='\0';. B) o8 b8 W, T0 R; Q6 t
return true; c4 m8 J& p0 K4 z5 e1 {
}
+ x; v' C6 o4 R" F3 z- s) S# a for (int i=0;i<n;i++)
7 O; r! A2 A$ {0 `* X+ ]# { {
( M. @$ \: D" W& g if(true==array[nIndex])
, p. G2 H' R2 Q$ k+ g( ^6 ?) F {
9 v3 H8 f% Q( ?
1 p' _4 O( m* M2 W bFlag=SearchForRoute(array,Seq,nLeft-1,i,n);
* F$ A1 q" L1 `6 ?6 z/ n! X }! m3 V; j0 d) L5 c+ E8 |
if(true==bFlag)+ ^% e0 w' {; g# v3 |, i- E
return true;* P+ Y4 l E( }* @
}) ~, _ i4 E& \. o
return false;
8 Q0 Z: m+ R" F# X};
# n6 K, T- o0 l: rint main()
1 ?1 g0 y6 |7 \0 C& ]{4 ?0 P O, r7 v: b; @
int nSeqLen;
, @! J( ?0 U7 V# N int nRelNum;
* r* u8 e" Y/ @1 I, k- d4 f3 z cout<<"Input the length of the sequence:"<<endl;
# ~% M" Y" z* }- {" \2 ^6 Q7 w cin>>nSeqLen;
8 J d8 N& k# g& G+ T cout<<"Input the number of relations between the elements:"<<endl;
; v: R* t8 N [0 x5 l cin>>nRelNum;+ w, S t O& N2 `0 E1 P1 j+ m
//1:if nRelNum<nSeqLen-1,then the relation can not be determined!6 y5 y3 g2 i1 Q* ~: n9 D- p9 D
if(nRelNum<nSeqLen-1)
4 [% T# L) k5 [, ?# {$ }" X {
1 V( o# s& r. w# k: [/ d cout<<"The relation can not be determined!"<<endl;
, V' r$ n0 }2 C4 o return 0;: S1 D4 h' I2 ^& M5 _) f
}+ c) w+ b: r) N
string* strRelations=new string[nRelNum];8 [* [3 |; v2 [2 C A/ F
char* Seq=new char[nSeqLen+1];
: U6 W! C2 @* O7 E- x( W: ^ bool** array=new bool*[nSeqLen];
$ x% _" c' }: e* t2 k0 o* k A! C, N0 f! ?/ T, U" |
for(int i=0;i<nRelNum;i++)! |$ V" d! W: D1 ~! o7 `) T+ \$ {
{1 G: z, @5 `; _" c( f8 A* B
cout<<"Input the "<<i+1<<"th relation:"<<endl;
0 O5 s, _1 u& D9 R7 i0 ` cin>>strRelations;
3 @1 ], x' E3 \& n }
+ c# V3 ] B5 a$ _- o7 J8 @$ f
. e* @0 i/ v+ G. E; } for (int i=0;i<nSeqLen;i++)5 E8 l. a6 o2 L5 S- a) O' n
{
8 q ^' r6 x% E; A array=new bool[nSeqLen];
- Q) p; y0 w1 T9 V3 D for (int j=0;j<nSeqLen;j++)
- x5 N% m& n! Z7 ]& w0 z6 T array[j]=false;
1 F% P M9 A" E A6 t$ R }
# N6 S# Z1 y7 c+ k! Q //The main loop
9 Q$ q& W5 D* A0 V6 r for (int i=0;i<nRelNum;i++)/ X" e" B% z; {5 C8 v- Y |$ R) v% ~
{8 R8 Z! ^" P d/ q& m7 @) q
char a=strRelations[0];
: \" f, D- B1 D char b=strRelations[2];
j! W5 P5 d+ G3 k* S assert(a>='a' && a<'a'+nSeqLen && b>='a' && b<'a'+nSeqLen);
( y7 \7 g& m6 L2 g7 K$ J) @2 ~ array[a-'a'][b-'a']=true;1 h4 r C2 Y) }
6 t$ S7 p2 J7 j2 ]+ v# j$ B/ Z) w
Marshall(array,nSeqLen);
/ D. k, K7 D3 `; l3 f" y# A0 ~/ q$ D' A+ g) H8 {
//Check for Inconsistency after every relation' K* Q0 k4 [, c) l
for (int m=0;m<nSeqLen;m++)" {6 c7 F8 i2 \: z- }' z
{
" W) B2 V5 t4 u2 b! ~ if(true==array[m][m])2 V9 x" N: s" r) m Q' s% y
{
9 k: v& l% d' n4 m' c cout<<"Inconsistency found after"<<i+1<<"th relation!"<<endl;" c0 z) u- S4 p
delete []strRelations;+ z1 o# w/ A$ S3 C
for(int k=0;k<nSeqLen;k++)
! G5 v8 z( t: A. E- W6 q) d delete []array[k];' ]0 p6 {7 V# V0 ]( e# X
delete []array;
7 R7 w# Q4 Z8 i5 R2 q/ K c# u delete []Seq;2 Z5 Q2 w9 r% ?" I9 O1 k* q+ V
return 0;
8 e# i+ ]7 ^& ]
3 u! t7 \4 ^# J }+ n8 W0 t/ N# a) |
}
8 G% @' ]. D1 n( }/ L6 Y+ R/ T9 {2 u6 i8 C3 X- `6 t
//Check for the determined sequence after every relation 5 ~% P3 S+ G) l9 V) s( T
for (int j=0;j<nSeqLen;j++)( ]3 Q4 u' ~' ^, p7 @! ]
{. ]2 B. G2 s; \3 O4 u+ r2 b) i' E$ ~0 H
if(true==SearchForRoute(array,Seq,nSeqLen,j,nSeqLen))
+ S- c2 R5 l6 d' q/ X {9 y* F" {3 R, f7 l) l# n( b1 ~, O
cout<<"Sorted sequence determined after the"<<i+1<< "th relations:"<<Seq<<endl;" `1 K k# e4 I3 L/ x8 g( _
delete []strRelations;& h y4 ?3 t% F) R; q1 \, y8 e2 o
for(int m=0;m<nSeqLen;m++)
; W; G8 R6 b$ C7 I3 K8 f- k delete []array[m];: ^! _8 N7 y' ` C% D
delete []array;
' |) j2 _# t8 p0 @6 O" I8 g delete []Seq;
* g* R) |0 q; v- U' Z return 0;
0 ~2 t5 \0 m& x: x }
/ ~- O1 j) h1 W' ]6 N7 n }- q; G$ m$ Y8 D2 ]
& Q& d0 M4 v, v5 i& ?0 Q
6 f, g8 N: ]9 `( U }7 t F1 X( a2 X' _( M
//If the program has come to here ,then the relationship hasn't been determined!!!
# X2 h5 c0 |% }4 o$ p- n cout<<"The relation can not be determined!"<<endl;# X) U: b2 b9 I% f5 _3 n
delete []strRelations;! e3 x- l9 D5 Q4 ^' m4 M& o
for(int m=0;m<nSeqLen;m++)/ E! l- v' ?- o% `2 n# w
delete []array[m];3 y! l1 t; c; Z0 U) F
delete []array;( G) D7 {3 T1 O3 x) f% }! R. f; l
delete []Seq;) t. _( a3 q. C/ ~% \) P
& ~- I( S o5 l. }% Z return 0;& o# K. V7 [3 _) p: Q5 S* ]
}
' {# d( s, A3 V T4 [, K5 e8 T9 b9 ?4 |2 L( C- L1 w
程序解题二:#include"stdio.h"
9 @9 w8 I6 j m* Vvoid main()- b& S5 L. b* N: \* }8 D3 z
{7 e4 h a" r/ i
int n_m[100][2];
# L' \/ O1 \, N- Y char re[1000][3],* {: j# f! I! D8 G2 _" j
temp[26];
& m6 t% D( o% ?& H. e; V q' j) t int i=0,j=0;, J/ j1 U/ y8 ^
scanf("%d%d",&n_m[0],&n_m[1]);* p& N) u: v0 X, X# o% B
for( ;j<n_m[1];j++)/ }- r# Y6 D" K
scanf("%s",&re[j]);
, o1 a# c7 c- M5 L; }4 h- I& M% } while(n_m[0]!=0&&n_m[1]!=0)1 S* A7 q m; n2 N
{
* X# g! A3 R h3 @8 E i++;
4 s, b7 r$ s+ e- h7 Q4 Z/ Y$ n scanf("%d%d",&n_m[0],&n_m[1]);
: m9 c' J$ p% u8 a for( int f=0;f<n_m[1];f++,j++)
1 C7 T1 Z$ H, n7 @ scanf("%s",&re[j]);5 ~/ k q9 e3 c( g8 D
}" @7 w: ^0 Q8 v9 }5 L: F- [
i=0;
5 n' g. V+ g0 U1 o6 {7 H8 f j=0;
# V3 V4 ]3 k A5 S, x; _2 m for( ;n_m[0]!=0&&n_m[1]!=0;i++)- s/ L" R5 ?2 H" f4 Q/ H
{+ v! u% o5 o6 ^9 c. J# w
int a=0,b=0,l=1;: Y9 N4 V2 E d {* j, C* j; N
for(a=j;a<j+n_m[1]-1;a++)' D9 r$ K s" b. q
for(b=a+1;b<j+n_m[1];b++)
9 X4 l3 T4 S# ^* y {* o& p& P2 n- y( j0 S
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])- G$ u( h& h0 Y3 I3 d
{
# b. ]& C9 [/ o! M$ Q$ M+ y8 f l=0;0 }- A$ v7 V; N3 x" ^8 C7 l
printf("Inconsistency found after %d relations.\n",n_m[1]);
, d2 c- B4 u; g$ i0 m! Y. D break;) j$ a& K! L& T) V( E
}
# }; o; _* _ h) A* ? }
# o& ?9 Q. P2 y& f: S- C+ m if(l==0)
5 T7 h& s; J+ {, X5 } continue;//Inconsistency found after x relations.
+ q- w! i" U! l% M else{9 C' x# N5 I# R/ F8 z5 e
if(n_m[1]<n_m[0]-1)1 G8 s% s2 l, l! P5 i/ @0 l
{/ X: y7 i6 v+ `
printf("Sorted sequence cannot be determined.\n");
3 J: P7 ]5 i8 e9 r. M3 ]% W7 q l=0;
3 ^. m7 u5 F4 u ]$ \ }% y5 U% x: A4 \% T
else4 r; @2 J7 m x$ y0 Y+ K
{
3 L: b5 B. E. q) ]; f6 M4 W! x) b if(n_m[1]==n_m[0]-1)
3 T3 r- M, f$ ^* ]2 A4 B# I# i { % H& n( g3 ?7 d& c
int k=0,p=0;
$ m( p0 M& W( I/ O7 r. H for( ;k<n_m[1]-1;k++)
! b( \8 o# y* A+ r" t/ _ for(p=k+1;p<n_m[1];p++)! D& w+ |8 k7 L9 x- ]2 a* b% n
if(re[0]==re[0]||re[2]==re[2])0 b! ?. S4 q+ c8 S$ q* q' c0 ^
{ m3 v4 i3 J! O1 L2 c
printf("Sorted sequence cannot be determined.\n");
) O% T% Q# j7 |' R& w6 K break;7 B: u' J" z9 X: b, q
l=0;
$ S' q! b+ P7 J }2 E2 o! n9 o" D# D' i0 \
}4 U9 B" y& x6 T! ~
}
% s% ?- o( n* ?( B6 F if(l==0)
$ C: D% g, E3 v% B* _' k @ continue;//Sorted sequence cannot be determined.
+ W6 f4 f- G- J8 D( s T2 Z: B/ y: W( F2 `
else& E* l9 e! V: f5 J) Y
{ ?2 g8 O( _: o5 t
0 I) g. q2 ^- [, S0 ~ for(int k=0;k<n_m[0];k++) ]9 x E1 }2 g
temp[k]=k+65;
8 z# ~, Z T; m- m for(k=0;k<n_m[1];k++,j++)
" r1 h2 P G& [, J' U) ? {
% s3 g) ?, O `: G- @" A' q" ` int t1=0,t2=0;
2 s& }* ~- I i p* w for(int s=0;s<n_m[0];s++)+ J3 E0 o3 L! V1 a/ O
{3 g! X% V% O4 d$ o+ n
if(temp==re[0])
3 j0 M9 p/ U) }+ ?) e t1=s;- w8 D9 }! Z4 i5 ^" d' r/ ]' ]
if(temp==re[2])
2 ?7 b* _# w2 u( b t2=s;
4 W7 F9 y1 c6 }! l2 O" K+ `5 { }
& Z+ c0 c% E7 L( c if((t1>t2)&&re[1]=='<')1 L) g1 B5 n* f, \' g
{
$ r" Y2 s4 J6 O8 _8 l2 n- B: a char t3=temp[t1];7 Y1 t# [7 ~9 e: V/ V, _
temp[t1]=temp[t2];) q2 U, ^ t8 Z8 \' \2 l% h5 B4 w
temp[t2]=t3;
9 ~* W) [; Z7 X9 f }
) r) c- o4 q3 X- K" R/ ^$ M7 J3 h. K% L }4 `( y( E6 r% k( |: a
int count=0;/ k- |( m' c: Z& b% z; U* n, V
for(int s=0;s<n_m[0]-1;s++)3 g, J" A6 _, d
for(int d=j-n_m[1];d<j;d++)- j9 u& j: v& w$ p
if(re[d][0]==temp&&re[d][2]==temp[s+1])
; e7 }& p9 n1 q% { {: P) F0 g: R: b5 _) X
count++; o: A6 q; u' V# z! W) T9 F
break;
5 E* T @& R S: B }
& |6 ~4 B* L6 |5 u) A if(count==n_m[0]-1)
+ d" r: v2 u, y7 F3 ^ {
: t" y% I( b5 ?$ ~' M printf("Sorted sequence determined after %d relations:",n_m[1]);
1 W: \7 W. Y! D2 ` for(int f=0;f<n_m[0];f++)4 r8 g' f7 X! a% x( l$ H4 q% F
printf("%c",temp[f]);
. H0 h* r5 N; z/ R) G& u+ S- H) x3 p' ] printf("\n");, }# e1 x& c e3 C3 d+ g
}
+ j+ r9 [, Y' y- f% Q else# ~3 H9 P! u) A! |
printf("Sorted sequence cannot be determined.\n"); : Y3 Y S3 [+ {2 h; b
}
% \; S& f, Q* F }4 a+ t j) m/ ~8 b% i
}! w; s2 M1 `8 I5 B" @( O1 P" P
}
! w$ t( U7 V- ]* i! i0 |0 z
, u$ ]5 Z8 s4 V; Z+ N; x1 M
) D7 n8 w, F! C; o3 t' ~. M9 d9 l: {
7 A' w" c# G( }+ h, H1 [6 G- w; I5 w8 ^- i: u3 C3 z- T
5 `$ n9 L, H& |) ?" ]$ X3 @- X$ l9 f# R
* _7 u/ m" J' P, g( J( s l% c
来源:编程爱好者acm题库 |